wvuing/IMPSAlwaysOnlinePlugin/src/CIMPSAlwaysOnlineScheduler.h
changeset 0 094583676ce7
--- /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