messagingappbase/ncnlist/inc/CNcnMsgWaitingManager.h
branchRCL_3
changeset 60 7fdbb852d323
parent 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/ncnlist/inc/CNcnMsgWaitingManager.h	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,221 @@
+/*
+* 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:   Defines class CNcnMsgWaitingManager.
+*
+*/
+
+
+
+#ifndef CNCNMSGWAITINGMANAGER_H
+#define CNCNMSGWAITINGMANAGER_H
+
+//  INCLUDES
+#include "MNcnMsgWaitingManager.h"
+
+#include <e32base.h>
+#include <etelmm.h>
+
+// FORWARD DECLARATIONS
+class CNcnModelBase;
+#ifdef _DEBUG
+class CNcnMsgWaitingManagerObserver;
+#endif
+
+// CLASS DECLARATION
+
+/**
+ * CNcnMsgWaitingManager is responsible of handling 
+ * message related indicators and counts. It uses
+ * ETEL MM API to store indicator and message count values. 
+ */
+class CNcnMsgWaitingManager :
+    public CActive,
+    public MNcnMsgWaitingManager
+    {
+    public:  // Constructors and destructor
+
+        /**
+         * Two-phased constructor.
+         * @param aModel Reference to ncn model
+         */
+        static CNcnMsgWaitingManager* NewL( CNcnModelBase &aModel );
+
+        /**
+         * Destructor.
+         */
+        virtual ~CNcnMsgWaitingManager();
+                
+    public: // From CActive
+    
+        /**
+         * RunL
+         */
+        void RunL();
+
+        /**
+         * RunError
+         * @param aError the error returned
+         * @return error
+         */
+        TInt RunError( TInt aError );
+
+        /**
+         * DoCancel
+         */
+        void DoCancel();
+        
+    public: // From MNcnMsgWaitingManager
+
+        /**
+         * SetIndicator
+         * Method is used to enable / disable indicator. 
+         * @param aIndicator Id of the indicator that should be enabled / disabled. See MNcnMsgWaitingManager for ids. 
+         * @param aEnable ETrue if indicator should be enabled.
+         * @return error
+         */        
+        TInt SetIndicator( const TNcnIndicator aIndicator, TBool aEnable );
+
+        /**
+         * SetMessageCount
+         * Method is used to store new message count for certain message types. 
+         * @param aMsgType Message type which count is updated. See MNcnMsgWaitingManager for ids. 
+         * @param aCount Number of new messages.
+         * @param aEnableIndicator ETrue if indicator should be enabled for certain message type. 
+         * @return error
+         */                
+        TInt SetMessageCount( const TNcnMessageType aMsgType, TUint aCount, TBool aEnableIndicator );
+
+        /**
+         * GetIndicator
+         * Method returns indicator status (enabled/disabled).  
+         * @param aIndicator Indicator id. See MNcnMsgWaitingManager for ids. 
+         * @param aEnabled ETrue if indicator is enabled. 
+         * @return error
+         */                                
+        TInt GetIndicator( const TNcnIndicator aIndicator, TBool& aEnabled );
+        
+        /**
+         * GetMessageCount
+         * Method returns new message count for certain message type
+         * @param aMsgType Message type. See MNcnMsgWaitingManager for ids. 
+         * @param aCount Number of new messages.
+         * @return error
+         */                        
+        TInt GetMessageCount( const TNcnMessageType aMsgType, TUint& aCount );
+        
+        /**
+         * ConstructionReady
+         * Returns ETrue, if initial settings have been read from RMobilePhone. Otherwise returns EFalse.
+         */                                                        
+        TBool ConstructionReady();
+
+        /**
+         * GetFirstIndicatorStatus
+         * Indicator statuses are fetched only after SIM has been verified to be in the ESimUsable state.
+         */          
+        void GetFirstIndicatorStatus();
+        
+                                                        
+    private:  // Constructors and destructor
+
+        /**
+         * C++ default constructor.
+         * @param aMsvSessionHandler Msv session handler reference.
+         */
+        CNcnMsgWaitingManager( CNcnModelBase &aModel );
+        
+        /**
+         * 2nd. phase constructor.
+         */
+        void ConstructL( );
+        
+	private: // Type definitions
+	
+		/**
+         * Current state indicating what kind of operation is on-going. 
+         */
+		enum TNcnWaitingManagerState
+			{
+			ENcnIdle,
+			ENcnGetIndicator,
+			ENcnSetIndicator,
+			ENcnSetCount,
+			ENcnGetCount,
+			ENcnNotifyMsgWaiting
+			}; // TNcnWaitingManagerState   
+			
+		/**
+		 * Work Queue element. 
+		 */			
+		struct TNcnReqQueueElement
+			{
+			TNcnReqQueueElement(TNcnWaitingManagerState aCmd, TInt aField, TBool aParam1, TUint aParam2 = 0 )
+				{
+				iCmd = aCmd;
+				iField = aField;
+				iParam1 = aParam1;
+				iParam2 = aParam2;
+				}
+			
+			TNcnWaitingManagerState	iCmd; 
+			TInt	iField;			// See TNcnIndicator or TNcnMessageType in MNcnMsgWaitingManager
+			TBool	iParam1;		// ETrue/EFalse if indicator should be enabled
+			TUint	iParam2;		// Used only for count operations. Tells if indicator should be enabled/disabled.					
+			}; // TNcnReqQueueElement			   
+        
+	private: // Internal methods. 
+	
+        /**
+         * Enable / disable indicator
+         */
+		void DoSetIndicator( TInt aId, TBool aEnable );
+		        
+    private: // Data
+            
+		// Current state
+        TNcnWaitingManagerState iState;
+        
+        // Reference to ncn model
+        CNcnModelBase &iModel;
+        
+        // Needed to initialize iMobilePhone
+        RTelServer iTelServer;
+        
+        // Needed to initialize iMobilePhone
+        RTelServer::TPhoneInfo iPhoneInfo;
+            
+		// Used to store indicator flags and message counts. 
+        RMobilePhone iMobilePhone;
+                        
+        // Struct is a container for indicator flags and message counts
+        RMobilePhone::TMobilePhoneMessageWaitingV1      iMsgWaiting;  
+                      
+		// Package for iMsgWaitingV1                      
+        RMobilePhone::TMobilePhoneMessageWaitingV1Pckg  iMsgWaitingPckg;   
+        
+        // Request Queue
+        RArray<TNcnReqQueueElement> iReqQueue;       
+        
+#ifdef _DEBUG
+
+		CNcnMsgWaitingManagerObserver *iObserver;
+#endif        
+        
+        TBool iConstructionReady;
+
+    }; // CNcnMsgWaitingManager
+
+#endif    // CNCNMSGWAITINGMANAGER_H
+
+// End of File