diff -r 000000000000 -r 094583676ce7 wvuing/IMPSAlwaysOnlinePlugin/src/CIMPSAlwaysOnlineScheduler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSAlwaysOnlinePlugin/src/CIMPSAlwaysOnlineScheduler.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,293 @@ +/* +* 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: Helper class for always online scheduling +* +*/ + + + +#ifndef __CIMPSALWAYSONLINESCHEDULER_H__ +#define __CIMPSALWAYSONLINESCHEDULER_H__ + +// INCLUDES +#include "MPEngAOWaitObserver.h" +#include "MIMPSSharedDataObserver.h" +#include "MIMPSSharedData.h" +#include "timpsaokeys.h" + +// FORWARD DECLARATIONS +class MIMPSScheduleObserver; +class CPEngAOPluginTimer; +class CIMPSAOKeys; + +/** +* The implementation for the always online scheduling +* +* @lib PEngAOPlugin.lib +* @since 2.6 +*/ +class CIMPSAlwaysOnlineScheduler : public CBase, + public MPEngAOWaitObserver, + public MIMPSSharedDataObserver + { + + public: // Enumerations + + /** + * State of the scheduling + */ + enum TIMPSAOPluginScheduleState + { + EIMPSAOPluginAlldayConnection = 0, + EIMPSAOPluginNormalBeforeConnection = 1, + EIMPSAOPluginNormalDuringConnection = 2, + EIMPSAOPluginNormalAfterConnection = 3, + EIMPSAOPluginOvernightOldConnection = 4, + EIMPSAOPluginOvernightNoConnection = 5, + EIMPSAOPluginOvernightNewConnection = 6, + EIMPSAOPluginInvalidSchedule = 10 + }; + + /** + * The waiting state of the scheduler + */ + enum TIMPSAOSchedulerWaitReason + { + EIMPSAOSchedulerNotWaiting = 0, + EIMPSAOSchedulerWaitingForReconnect = 1, + EIMPSAOSchedulerWaitingForDisconnect = 2, + EIMPSAOSchedulerWaitingForAllDayConnRefresh = 3 + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aKeys Shared datakeys and enumeration for retrieve + * right information + */ + static CIMPSAlwaysOnlineScheduler* NewL( TIMPSAOKeys& aKeys ); + + /** + * Destructor. + */ + virtual ~CIMPSAlwaysOnlineScheduler(); + + 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: // New functions + + /** + * Adds observer for this scheduler + * @param aSchObserver observer for scheduled login/logouts or schedule changes + */ + void SetObserver( MIMPSScheduleObserver *aSchObserver ); + + /** + * Scheduler starts schedule login/logout actions as set in settings and + * stars observing settings changes. + */ + void StartSchedulingL(); + + /** + * Stops login/logout scheduling and stops observing settings changes. + */ + void StopScheduling(); + + /** + * Check if scheduled login is OK. + * @return ETrue if scheduled login is OK, else EFalse + */ + TBool IsScheduledLoginOk(); + + /** + * Mark the testing class a friend, because this class is not "public" class + */ + friend class T_CIMPSAlwaysOnlineScheduler; // CSI: 36 # Only used for testing + + private: + + /** + * C++ default constructor. + * @param aKeys Shared datakeys and enumeration for retrieve + * right information + */ + CIMPSAlwaysOnlineScheduler( TIMPSAOKeys& aKeys ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + /* + * Checks whether it's ok to do the login by the scheduled + * setting or not. If not, starts to wait for the event. + * If the login is allowed by schedule, starts to wait for + * the next logout. + */ + void CheckScheduledLoginSettings(); + + /** + * Checks if there is a connection scheduled for the + * given day. + * @param aToday The day the connection is queried for + * @paran aConnectionDays The set connection days in the + * shared data. + * @return TBool ETrue if there's an connection on aToday + */ + TBool ResolveIfConnectionToday( TInt aToday, TInt aConnectionDays ); + + /** + * Gets the connection days from the shared data key + * @return TInt The bitmask of the user selected connection days + */ + TInt ResolveConnectionDays(); + + /** + * Finds the next connection day + * @param aToday Today's day's number + * @paran aConnectionDays The set connection days in the + * shared data. + * @param aFindConnection ETrue if we are looking for next connection day + * @return TInt How many days until next connection + */ + TInt FindNextConnectionChangeDay( TInt aToday, + TInt aConnectionDays, + TBool aFindConnectionDay ); + + /** + * Resolves the connection hours + * @param aTimeNow is the current time + * @param aStartTime is the connection start time + * @param aEndTime is the connection end time + * @return TBool If overnight schedule + */ + TInt FindNextConnectionHours( TTime aTimeNow, + TTime& aStartTime, + TTime& aEndTime ); + + /** + * Sets scheduled login state + * @param aIsScheduledLoginOk ETrue if client should be logged in, else EFalse + * @param aReason Tells what scheduler is waiting according to schedule + */ + void SetScheduledLogin( TBool aIsScheduledLoginOk, + TIMPSAOSchedulerWaitReason aReason ); + + /** + * Starts the waiting timer + * @param aTime, time for timer to lauch + */ + void StartTimer( TTime aTime ); + + /** + * Parses time from string. Panics if time cannot be parsed. + * @param aTime variable where to time is parsed + * @param aTimeString to be parsed time in string format + */ + void ParseTime( TTime& aTime, const TDesC& aTimeString ); + + /** + * Calculates time difference between two time values + * in minutes. Panics if time difference calculation fails. + * @param aTime time to where difference is calculated + * @param aComparableTime time where aTime difference is calculated + * @param aInterval time difference is stored to this variable. + */ + void MinutesInterval( TTime aTime, + TTime aComparableTime, + TTimeIntervalMinutes& aInterval ); + + /** + * Returns the hour part of the connection time as integer. + * Returns the given default if parsing fails. + * @param aTime Time where from hour is parsed + * @param aDefault Default value which is return if parsing fails + * @return Parsed hour integer + * @since 2.6 + */ + TInt Hour( const TDesC& aTime, TInt aDefault ); + + /** + * Returns the minute part of the connection time as integer + * Returns the given default if parsing fails. + * @param aTime Time where from minute is parsed + * @param aDefault Default value which is return if parsing fails + * @return Parsed minute integer + * @since 2.6 + */ + TInt Minute( const TDesC& aTime, TInt aDefault ); + + private: // Data + + /// Shared data client to read common settings, owned + MIMPSSharedData* iSharedDataClient; + + /// Listens settings changes, owned + MIMPSSharedData* iSettingChangesNotifier; + + /// Timer for waiting connect and disconnects according to schedule. + /// Owned. + CPEngAOPluginTimer* iTimer; + + /// Tells if the scheduled login is in "should be logged in" state + TBool iScheduledLoginOk; + + /// Defines the current wait reason of the Scheduler + TIMPSAOSchedulerWaitReason iWaitReason; + + /// Observer for schedule changes, not owned + MIMPSScheduleObserver* iScheduleObserver; + + /// shared data keys etc to get wanted information + TIMPSAOKeys& iKeys; + + /// helper variable to track if scheduling is started or not + TBool iSchedulingIsStarted; + + /// variable to track if current schedule check is + /// scheduler startup check or timed check + TBool iStartupCheckOngoing; + + }; + +#endif // __CIMPSALWAYSONLINESCHEDULER_H__ + +// End of File