mmsharing/mmshengine/inc/musengtelephoneutils.h
branchRCL_3
changeset 33 bc78a40cd63c
parent 32 73a1feb507fb
--- a/mmsharing/mmshengine/inc/musengtelephoneutils.h	Tue Aug 31 15:12:07 2010 +0300
+++ b/mmsharing/mmshengine/inc/musengtelephoneutils.h	Wed Sep 01 12:31:01 2010 +0100
@@ -27,19 +27,22 @@
 #include <MTelephonyAudioRoutingObserver.h>
 #include <TelephonyAudioRouting.h>
 #include <RPhCltServer.h>
+#include <cenrepnotifyhandler.h>
 
 // FORWARD DECLARATIONS
 class CRepository;
 class CTelephonyAudioRouting;
 class CPhCltCommandHandler;
 class MMusEngAudioRoutingObserver;
+class MMusEngVolumeChangeObserver;
 
 /**
 * Utility class to handle all phone related requests:
 * Audio routing, volume control and microphone muting.
 */
 class CMusEngTelephoneUtils : public CActive,
-                              public MTelephonyAudioRoutingObserver
+                              public MTelephonyAudioRoutingObserver,
+                              public MCenRepNotifyHandlerCallback
     {
     MUS_UNITTEST( UT_CMusEngTelephoneUtils )
     MUS_UNITTEST( UT_CMusEngSession )
@@ -49,14 +52,14 @@
 		/**
    		*
         */
-		static CMusEngTelephoneUtils* NewL( 
-		    MMusEngAudioRoutingObserver& aAudioRoutingObserver );
+		static CMusEngTelephoneUtils* NewL();
 
 		/**
    		*
         */
 		~CMusEngTelephoneUtils();
 
+
 	public: // API
 	
 	    /**
@@ -64,12 +67,29 @@
         * 
         * @return ETrue if audio routing can be changed using LoudspeakerL
         */
-        TBool AudioRoutingCanBeChanged();
-
+        TBool AudioRoutingCanBeChanged() const;
+        
+        /**
+		* Checks if audio routing is headset
+		* 
+		* @return ETrue if audio routing is headset
+		*/
+        TBool IsAudioRoutingHeadset() const;
+        
+        /**
+		* Checks if audio routing is LoudSpeaker
+		* 
+		* @return ETrue if audio routing is LoudSpeaker and 
+		* currentMode != iAudioOutputAtStartup
+		*/
+        TBool IsAudioRoutingLoudSpeaker() const;
+        
 		/**
    		* Changes the audio routing between loudspeaker and handset.
+   		*  
+   		* @param aShowDialog if ETrue, user is notified about new audio routing
         */
-        void LoudspeakerL( TBool aEnable );
+        void LoudspeakerL( TBool aEnable, TBool aShowDialog );
 
 		/**
    		*
@@ -77,10 +97,15 @@
 		TBool IsLoudSpeakerEnabled() const;
 		
 		/**
-   		*
+   		* Returns current CS call volume level from central repository
         */
 		TInt GetVolumeL() const;
 
+        /**
+        * Returns locally cached CS call volume level
+        */
+		TInt GetVolume() const;
+		
 		/**
    		*
         */
@@ -94,7 +119,19 @@
         /**
         * Returns current CS call mic mute state.
         */
-        TBool IsMicMutedL();                                        
+        TBool IsMicMutedL();
+    
+        /**
+        * Sets audio routing observer. Can be set to NULL in order to indicate
+        * ending of observing changes in audio routing.
+        */
+        void SetAudioRoutingObserver( MMusEngAudioRoutingObserver* aObserver );
+                                        
+        /**
+        * Sets volume level observer. Can be set to NULL in order to indicate
+        * ending of observing changes in volume level.
+        */
+        void SetVolumeChangeObserver( MMusEngVolumeChangeObserver* aObserver );
     
     private: // inherited from CActive
 
@@ -102,6 +139,7 @@
    		*
         */
         void RunL();
+        TInt RunError( TInt aError );
         
 		/**
    		* Cancels outstanding request to phone client
@@ -115,28 +153,37 @@
          * Available outputs have changed
          */
         void AvailableOutputsChanged( 
-            CTelephonyAudioRouting& aTelephonyAudioRouting );
+                        CTelephonyAudioRouting& aTelephonyAudioRouting );
     
         /**
          * Some other application has changed audio output routing
          */
         void OutputChanged( 
-            CTelephonyAudioRouting& aTelephonyAudioRouting );
+                        CTelephonyAudioRouting& aTelephonyAudioRouting );
     
         /**
          * Our request to change audio output routing has completed
          */
         void SetOutputComplete( 
-            CTelephonyAudioRouting& aTelephonyAudioRouting,
-            TInt aError );
+                        CTelephonyAudioRouting& aTelephonyAudioRouting,
+                        TInt aError );
+    
+        /**
+        * Set output if setting is currently allowed. Leaves with KErrAccessDenied
+        * if setting is not allowed.
+        */
+        void DoSetOutputL( CTelephonyAudioRouting::TAudioOutput aAudioOutput );
+        
+    private:// From MCenRepNotifyHandlerCallback
+        
+        void HandleNotifyGeneric( TUint32 aId );
         
     private:
 
 		/**
    		* Default C++ constructor
         */
-		CMusEngTelephoneUtils( 
-		    MMusEngAudioRoutingObserver& aAudioRoutingObserver );
+		CMusEngTelephoneUtils();
 
 		/**
    		* 2nd phase constructor
@@ -153,10 +200,14 @@
         */
 		TInt ValidateVolume( const TInt aVolume ) const;
 		
-
+		/**
+		 * Checks current volume level and notifies observer, if volume changed
+		 * @param aAudioRouteChanged, ETrue if volume check should be done
+		 *        because of audio route change
+		 */
+		void UpdateCurrentVolume( TBool aAudioRouteChanged );
+		
     private: // DATA
-        
-        MMusEngAudioRoutingObserver& iAudioRoutingObserver;
 
         /**
         *  Stores the audio routing state at startup.
@@ -177,6 +228,27 @@
         * Command handler for muting the microphone
         */        
         CPhCltCommandHandler* iPhoneCommandHandler;
+        
+        /**
+        * Not owned.
+        */
+        MMusEngAudioRoutingObserver* iAudioRoutingObserver;
+
+        TBool iShowDialog;
+        
+        /**
+         * Central repository notifier instance. Owned.
+         */
+        CCenRepNotifyHandler* iNotifier;
+       
+        /**
+         * Volume change observer
+         * Used to inform session about volume updates
+         */
+        MMusEngVolumeChangeObserver* iVolumeObserver;
+        
+        TInt iCurrentVolume;
     };
 
-#endif // MUSENGTELEPHONEUTILS_H
+
+#endif // MUSENGTELEPHONEUTILS_H
\ No newline at end of file