devsoundextensions/globalaudiosettings/src/GlobalAudioSettingsImpl.cpp
changeset 0 b8ed18f6c07b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/globalaudiosettings/src/GlobalAudioSettingsImpl.cpp	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,1732 @@
+/*
+* Copyright (c) 2006 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:   Implementation of the Phone Profile Settings API
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "GlobalAudioSettingsImpl.h"
+#include <e32std.h>
+#include <GlobalAudioSettingsPSKeys.h>
+#include <MGlobalAudioSettingsObserver.h>
+#include <centralrepository.h>
+#include "AudioClientsListManagerAO.h"
+#include <AudioClientsListPSKeys.h>
+
+#ifdef _DEBUG
+#define PRINT_MESSAGE
+#endif // _DEBUG
+
+const TInt KMaxLength=256;
+_LIT( KNoSound, "z:\\resource\\No_Sound.wav" );
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::NewL();
+// 
+// -----------------------------------------------------------------------------
+//
+CGlobalAudioSettingsImpl::CGlobalAudioSettingsImpl(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver)
+:iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver)
+	{
+	}
+	
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::NewL();
+// 
+// -----------------------------------------------------------------------------
+//
+CGlobalAudioSettingsImpl* CGlobalAudioSettingsImpl::NewL(
+                                        CGlobalAudioSettings &aGlobalAudioSettings,
+                                        MAudioSettingsObserver& aAudioSettingsObserver)
+	{
+	CGlobalAudioSettingsImpl* self = new (ELeave) CGlobalAudioSettingsImpl(
+	                                    aGlobalAudioSettings,aAudioSettingsObserver);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+	}
+	
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::ConstructL();
+// 
+// -----------------------------------------------------------------------------
+//
+void CGlobalAudioSettingsImpl::ConstructL()
+	{
+    
+  
+    CreatePropertiesL();
+    
+	iWarningTonesObserverAO = CWarningTonesObserverAO::NewL(
+                	                                        iGlobalAudioSettings,
+                	                                        iAudioSettingsObserver,
+                	                                        iGlobalAudioSettingsData);
+	iWarningTonesObserverAO->Subscribe();
+	
+	iMessagingTonesObserverAO = CMessagingTonesObserverAO::NewL(
+                                        	                iGlobalAudioSettings,
+                                        	                iAudioSettingsObserver,
+                                        	                iGlobalAudioSettingsData);
+	iMessagingTonesObserverAO->Subscribe();
+
+	iSilentProfileObserverAO = CSilentProfileObserverAO::NewL(
+                                        	                iGlobalAudioSettings,
+                                        	                iAudioSettingsObserver,
+                                        	                iGlobalAudioSettingsData);
+	iSilentProfileObserverAO->Subscribe();
+
+	iVibraObserverAO = CVibraObserverAO::NewL(
+                        	                iGlobalAudioSettings,
+                        	                iAudioSettingsObserver,
+                        	                iGlobalAudioSettingsData);
+	iVibraObserverAO->Subscribe();
+	iRingingTypeObserverAO = CRingingTypeObserverAO::NewL(
+	                                            iGlobalAudioSettings,
+	                                            iAudioSettingsObserver,
+	                                            iGlobalAudioSettingsData);
+    iRingingTypeObserverAO->Subscribe();
+     
+	iMessageToneObserverAO = CMessageToneObserverAO::NewL(
+	                                            iGlobalAudioSettings,
+	                                            iAudioSettingsObserver,
+	                                            iGlobalAudioSettingsData);
+	iMessageToneObserverAO->Subscribe();
+	iEmailToneObserverAO = CEmailToneObserverAO::NewL(
+	                                                iGlobalAudioSettings,
+	                                                iAudioSettingsObserver,
+	                                                iGlobalAudioSettingsData);
+	iEmailToneObserverAO->Subscribe();   
+	
+	
+    iVideoCallObserverAO = CVideoCallToneObserverAO::NewL(
+                                                            iGlobalAudioSettings,
+                                                            iAudioSettingsObserver,
+                                                            iGlobalAudioSettingsData);
+    iVideoCallObserverAO->Subscribe();  
+        
+    iRingingTone1ObserverAO = CRingingTone1ObserverAO::NewL(
+                                                                    iGlobalAudioSettings,
+                                                                    iAudioSettingsObserver,
+                                                                    iGlobalAudioSettingsData);
+    iRingingTone1ObserverAO->Subscribe();
+	
+    iRingingTone2ObserverAO = CRingingTone2ObserverAO::NewL(
+                                                                            iGlobalAudioSettings,
+                                                                            iAudioSettingsObserver,
+                                                                            iGlobalAudioSettingsData);
+    iRingingTone2ObserverAO->Subscribe();  
+	
+    iKeypadToneObserverAO = CKeypadToneObserverAO::NewL(
+                                                                            iGlobalAudioSettings,
+                                                                            iAudioSettingsObserver,
+                                                                            iGlobalAudioSettingsData);
+    iKeypadToneObserverAO->Subscribe();  
+                
+    iSilenceModeObserverAO = CSilenceModeObserverAO::NewL(
+                                                                                iGlobalAudioSettings,
+                                                                                iAudioSettingsObserver,
+                                                                                iGlobalAudioSettingsData);
+     iSilenceModeObserverAO->Subscribe();  
+	                    
+    RProperty publicSilenceProperty;
+	User::LeaveIfError(publicSilenceProperty.Attach(KGASPSUidGlobalAudioSettings, KGASPublicSilence));
+	User::LeaveIfError(publicSilenceProperty.Get(iGlobalAudioSettingsData.iPublicSilence));
+	publicSilenceProperty.Close();
+
+    iCAudioClientsListManagerAO = CAudioClientsListManagerAO::NewL( iGlobalAudioSettings,iAudioClientsListObserverArray,KAudioPolicyAudioClients);
+            
+    iPausedClientsListManagerAO = CAudioClientsListManagerAO::NewL( iGlobalAudioSettings,iAudioClientsListObserverArray,KAudioPolicyApplicationAudioStatePaused );
+    }
+    
+// Destructor
+CGlobalAudioSettingsImpl::~CGlobalAudioSettingsImpl()
+    {   
+        DeleteProperties();
+        delete iWarningTonesObserverAO;
+        delete iMessagingTonesObserverAO;
+        delete iSilentProfileObserverAO;
+        delete iVibraObserverAO;
+        delete iRingingTypeObserverAO;
+        delete iMessageToneObserverAO;
+        delete iEmailToneObserverAO;
+        delete iVideoCallObserverAO;
+        delete iRingingTone1ObserverAO;
+        delete iRingingTone2ObserverAO;
+        delete iKeypadToneObserverAO;
+        delete iSilenceModeObserverAO;
+        delete iCAudioClientsListManagerAO;
+        delete iPausedClientsListManagerAO;
+        iAudioClientsListObserverArray.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::NewL
+// Static function for creating an instance of the EnvironmentalReverb object.
+// -----------------------------------------------------------------------------
+//
+ TBool CGlobalAudioSettingsImpl::IsWarningTonesEnabled()
+	{
+	if(iGlobalAudioSettingsData.iWarningTones)
+	    return(ETrue);
+	else
+	    return(EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsMessageTonesEnabled
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CGlobalAudioSettingsImpl::IsMessageTonesEnabled()
+	{
+	if(iGlobalAudioSettingsData.iMessageTones)
+	    return(ETrue);
+	else
+	    return(EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsSilentProfileEnabled
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CGlobalAudioSettingsImpl::IsSilentProfileEnabled()
+	{
+	if(iGlobalAudioSettingsData.iSilentProfile)
+	    return(ETrue);
+	else
+	    return(EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsVibraEnabled
+// 
+// -----------------------------------------------------------------------------
+//
+ TBool CGlobalAudioSettingsImpl::IsVibraEnabled()
+	{
+	if(iGlobalAudioSettingsData.iVibra)
+	    return(ETrue);
+	else
+	    return(EFalse);
+	}
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsPublicSilenceEnabled
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CGlobalAudioSettingsImpl::IsPublicSilenceEnabled()
+	{
+	if(iGlobalAudioSettingsData.iPublicSilence)
+	    return(ETrue);
+	else
+	    return(EFalse);
+	}
+
+
+
+
+TDesC& CGlobalAudioSettingsImpl::MessageAlertTone()
+    {
+     return *iGlobalAudioSettingsData.iMessageToneName;
+    
+    }
+
+TBool CGlobalAudioSettingsImpl::IsMessageAlertToneEnabled()
+    {
+     if(iGlobalAudioSettingsData.iMessageToneName->CompareF(KNoSound)==0)
+         return EFalse;
+     else
+         return ETrue;
+    
+    }
+ TDesC& CGlobalAudioSettingsImpl::EmailAlertTone()
+    {
+    return *iGlobalAudioSettingsData.iEmailToneName;
+        
+    }
+ TBool CGlobalAudioSettingsImpl::IsEmailAlertToneEnabled()
+     {
+      if(iGlobalAudioSettingsData.iEmailToneName->CompareF(KNoSound)==0)
+          return EFalse;
+      else
+          return ETrue;
+     
+     }
+  CGlobalAudioSettings::TGASRingingType CGlobalAudioSettingsImpl::RingingType()
+    {
+    CGlobalAudioSettings::TGASRingingType type;
+   type= ( CGlobalAudioSettings::TGASRingingType)iGlobalAudioSettingsData.iRingingType;
+ 
+      return type;
+    }
+  
+  TDesC& CGlobalAudioSettingsImpl::VideoCallAlertTone()
+      {
+      return *iGlobalAudioSettingsData.iVideoCallToneName;
+      }
+  TBool CGlobalAudioSettingsImpl::IsVideoCallAlertToneEnabled()
+      {
+       if(iGlobalAudioSettingsData.iVideoCallToneName->CompareF(KNoSound)==0)
+           return EFalse;
+       else
+           return ETrue;
+      
+      }
+  TDesC& CGlobalAudioSettingsImpl::RingingAlertTone1()
+     {
+     return *iGlobalAudioSettingsData.iRingingTone1Name;
+     }
+  TBool CGlobalAudioSettingsImpl::IsRingingAlertTone1Enabled()
+      {
+       if(iGlobalAudioSettingsData.iRingingTone1Name->CompareF(KNoSound)==0)
+           return EFalse;
+       else
+           return ETrue;
+      
+      }
+  TDesC& CGlobalAudioSettingsImpl::RingingAlertTone2()
+     {
+     return *iGlobalAudioSettingsData.iRingingTone2Name;
+     }
+  
+  TBool CGlobalAudioSettingsImpl::IsRingingAlertTone2Enabled()
+      {
+       if(iGlobalAudioSettingsData.iRingingTone2Name->CompareF(KNoSound)==0)
+           return EFalse;
+       else
+           return ETrue;
+      
+      }
+ CGlobalAudioSettings::TGASKeypadVolume CGlobalAudioSettingsImpl::KeyPadToneVolume()
+     {
+     return (CGlobalAudioSettings::TGASKeypadVolume)iGlobalAudioSettingsData.iKeyPadVolume;
+     }
+ 
+ TBool CGlobalAudioSettingsImpl::IsSilenceModeEnabled()
+     {
+      return iGlobalAudioSettingsData.iSilenceMode;
+     }
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::RegisterAudioClientsListObserver
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CGlobalAudioSettingsImpl::RegisterAudioClientsListObserver(
+                            MAudioClientsListObserver& aObserver )
+	{
+	TInt status(KErrAlreadyExists);
+	if ( iAudioClientsListObserverArray.Find( &aObserver ) == KErrNotFound )
+	    {
+	    status = iAudioClientsListObserverArray.Append( &aObserver);
+	    if ( ( status == KErrNone ) && (iAudioClientsListObserverArray.Count() == 1 ) )
+	        {  	       
+	 	    iCAudioClientsListManagerAO->MonitorStart();
+	        iPausedClientsListManagerAO->MonitorStart();
+	        }
+	    }
+	return status;
+	}
+        
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::UnregisterAudioClientsListObserver
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CGlobalAudioSettingsImpl::UnregisterAudioClientsListObserver(
+                            MAudioClientsListObserver& aObserver)
+	{
+	TInt status(KErrNone);
+	status = iAudioClientsListObserverArray.Find( &aObserver );
+	if ( status != KErrNotFound )
+	    {
+	    iAudioClientsListObserverArray.Remove( status );
+	    if ( iAudioClientsListObserverArray.Count() == 0 )
+	        {
+	        iCAudioClientsListManagerAO->MonitorStop();
+	        iPausedClientsListManagerAO->MonitorStop();	
+	        }
+	    }
+	return status;
+	}
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::GetAudioClientsList
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CGlobalAudioSettingsImpl::GetAudioClientsList(
+                        CGlobalAudioSettings::TAudioClientListType aType,
+                        RArray<TProcessId>& aList )
+	{
+	TInt status(KErrNone);
+	
+	switch(aType)
+		{
+		case CGlobalAudioSettings::EActiveAudioClients:
+			{
+			status = iCAudioClientsListManagerAO->GetAudioClientsList( aType, aList );	
+			}
+			break;
+        case CGlobalAudioSettings::EPausedAudioClients:
+        	{
+        	status = iPausedClientsListManagerAO->GetAudioClientsList( aType, aList );     	
+        	}
+        	break;
+		default:		
+			break;
+			
+		}
+	 return status;
+	
+
+	}
+
+void CGlobalAudioSettingsImpl::CreatePropertiesL()
+    {
+    TSecurityPolicy read = TSecurityPolicy(ECapabilityWriteDeviceData);
+        TSecurityPolicy write = TSecurityPolicy(ECapabilityMultimediaDD);
+        
+        RProperty property;
+    TInt err = RProperty::Define(
+                                           KGASPSUidGlobalAudioSettings,
+                                           KGASWarningTones,
+                                           RProperty::EInt,
+                                           read,
+                                           write);   
+    
+    if(err == KErrNone)
+        {
+    iPropertiesCreated=ETrue;
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASMessageTones,
+                                        RProperty::EInt,
+                                        read,
+                                        write));
+    
+    
+    
+    User::LeaveIfError(RProperty::Define( 
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASSilentProfile,
+                                        RProperty::EInt,
+                                        read,
+                                        write));
+    
+    User::LeaveIfError(RProperty::Define(
+                                       KGASPSUidGlobalAudioSettings,
+                                       KGASVibra,
+                                       RProperty::EInt,
+                                       read,
+                                       write));
+    
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASPublicSilence,
+                                        RProperty::EInt,
+                                        read,
+                                        write));
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASRingingType,
+                                        RProperty::EInt,
+                                        read,
+                                        write));
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASMessageToneName,
+                                        RProperty::EText,
+                                        read,
+                                        write));
+    CleanupClosePushL(property);
+    User::LeaveIfError(property.Attach(
+                                                    KGASPSUidGlobalAudioSettings,
+                                                    KGASMessageToneName));
+        User::LeaveIfError(property.Set(
+                                                    KGASPSUidGlobalAudioSettings,
+                                                    KGASMessageToneName,
+                                                    KNullDesC));
+        CleanupStack::Pop();
+        property.Close();
+    
+    User::LeaveIfError(RProperty::Define(
+                                       KGASPSUidGlobalAudioSettings,
+                                       KGASEmailToneName,
+                                       RProperty::EText,
+                                       read,
+                                       write));
+    CleanupClosePushL(property);
+    User::LeaveIfError(property.Attach(
+                                                  KGASPSUidGlobalAudioSettings,
+                                                  KGASEmailToneName));
+       User::LeaveIfError(property.Set(
+                                                  KGASPSUidGlobalAudioSettings,
+                                                  KGASEmailToneName,
+                                                  KNullDesC));
+       CleanupStack::Pop();
+    property.Close();
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASVideoCallToneName,
+                                        RProperty::EText,
+                                        read,
+                                        write));
+    CleanupClosePushL(property);
+    
+    User::LeaveIfError(property.Attach(
+                                                  KGASPSUidGlobalAudioSettings,
+                                                  KGASVideoCallToneName));
+       User::LeaveIfError(property.Set(
+                                                  KGASPSUidGlobalAudioSettings,
+                                                  KGASVideoCallToneName,
+                                                  KNullDesC));
+       CleanupStack::Pop();
+       property.Close();
+    
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASRingingTone1Name,
+                                        RProperty::EText,
+                                        read,
+                                        write));
+    CleanupClosePushL(property);
+    User::LeaveIfError(property.Attach(
+                                                  KGASPSUidGlobalAudioSettings,
+                                                  KGASRingingTone1Name));
+       User::LeaveIfError(property.Set(
+                                                  KGASPSUidGlobalAudioSettings,
+                                                  KGASRingingTone1Name,
+                                                  KNullDesC));
+       CleanupStack::Pop();
+       property.Close();
+    
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASRingingTone2Name,
+                                        RProperty::EText,
+                                        read,
+                                        write));
+    CleanupClosePushL(property);
+    User::LeaveIfError(property.Attach(
+                                                   KGASPSUidGlobalAudioSettings,
+                                                   KGASRingingTone2Name));
+        User::LeaveIfError(property.Set(
+                                                   KGASPSUidGlobalAudioSettings,
+                                                   KGASRingingTone2Name,
+                                                   KNullDesC));
+        CleanupStack::Pop();
+        property.Close();
+    
+    User::LeaveIfError(RProperty::Define(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASKeypadToneVolume,
+                                        RProperty::EInt,
+                                        read,
+                                        write));
+    
+    User::LeaveIfError(RProperty::Define(
+                                            KGASPSUidGlobalAudioSettings,
+                                            KGASSilenceMode,
+                                            RProperty::EInt,
+                                            read,
+                                            write));
+        }
+    else if(err != KErrAlreadyExists)
+        {
+           
+            User::Leave(err);
+        }
+    else
+        {
+         
+          return;
+        }
+    
+    }
+
+void CGlobalAudioSettingsImpl::DeleteProperties()
+    {
+   
+       if(iPropertiesCreated)
+           {
+       
+       RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASWarningTones);
+       
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASMessageTones);
+        
+       
+        RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASSilentProfile);
+        
+       
+        RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASVibra);
+        
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASRingingType);
+        
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASMessageToneName);
+        
+       
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASEmailToneName);
+        
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASVideoCallToneName);
+        
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASRingingTone1Name);
+        
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASRingingTone2Name);
+        
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASKeypadToneVolume);
+        
+        RProperty::Delete(KGASPSUidGlobalAudioSettings,KGASSilenceMode);
+        iPropertiesCreated = EFalse;
+        
+            }
+    }
+//////////////////////////////////////////////////////////////////////
+//	CWarningTonesObserverAO											//
+//////////////////////////////////////////////////////////////////////
+CWarningTonesObserverAO::CWarningTonesObserverAO(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CWarningTonesObserverAO::~CWarningTonesObserverAO()
+	{
+	Cancel();
+	iWarningTonesProperty.Close();
+	}
+
+CWarningTonesObserverAO* CWarningTonesObserverAO::NewL(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+	{
+	CWarningTonesObserverAO* self = new (ELeave) CWarningTonesObserverAO(
+	                                                    aGlobalAudioSettings, 
+	                                                    aAudioSettingsObserver,
+	                                                    aGlobalAudioSettingsData);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CWarningTonesObserverAO::ConstructL()
+	{
+	User::LeaveIfError(iWarningTonesProperty.Attach(KGASPSUidGlobalAudioSettings, KGASWarningTones));
+    User::LeaveIfError(iWarningTonesProperty.Get(iGlobalAudioSettingsData.iWarningTones));
+	}
+	
+void CWarningTonesObserverAO::Subscribe()
+	{
+	if (!IsActive())
+	    {
+    	SetActive();
+    	iWarningTonesProperty.Subscribe(iStatus);
+	    }
+	}
+
+void CWarningTonesObserverAO::RunL()
+	{
+	TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CWarningTonesObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        status = iWarningTonesProperty.Get(iGlobalAudioSettingsData.iWarningTones);
+        if(status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASWarningTones;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CWarningTonesObserverAO::RunL:Property.Get Error[%d]"), status);            
+            }
+#endif // PRINT_MESSAGE
+        }
+	}
+
+void CWarningTonesObserverAO::DoCancel()
+	{
+	iWarningTonesProperty.Cancel();
+	}
+
+TInt CWarningTonesObserverAO::RunError(TInt /*aError*/)
+	{
+	return KErrNone;
+	}
+
+//////////////////////////////////////////////////////////////////////
+//	CMessagingTonesObserverAO											//
+//////////////////////////////////////////////////////////////////////
+CMessagingTonesObserverAO::CMessagingTonesObserverAO(
+                                CGlobalAudioSettings &aGlobalAudioSettings,
+                                MAudioSettingsObserver& aAudioSettingsObserver,
+                                TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CMessagingTonesObserverAO::~CMessagingTonesObserverAO()
+	{
+	Cancel();
+	iMessagingTonesProperty.Close();
+	}
+
+CMessagingTonesObserverAO* CMessagingTonesObserverAO::NewL(
+                                               CGlobalAudioSettings &aGlobalAudioSettings,
+                                               MAudioSettingsObserver& aAudioSettingsObserver,
+                                               TGlobalAudioSettings& aGlobalAudioSettingsData)
+	{
+	CMessagingTonesObserverAO* self = new (ELeave) CMessagingTonesObserverAO(
+                    	                        aGlobalAudioSettings, aAudioSettingsObserver, 
+                    	                        aGlobalAudioSettingsData);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CMessagingTonesObserverAO::ConstructL()
+	{
+	User::LeaveIfError(iMessagingTonesProperty.Attach(KGASPSUidGlobalAudioSettings, KGASMessageTones));
+	User::LeaveIfError(iMessagingTonesProperty.Get(iGlobalAudioSettingsData.iMessageTones));
+	}
+	
+void CMessagingTonesObserverAO::Subscribe()
+	{
+	if (!IsActive())
+	    {
+    	SetActive();
+    	iMessagingTonesProperty.Subscribe(iStatus);
+	    }
+	}
+
+void CMessagingTonesObserverAO::RunL()
+	{
+	TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CMessagingTonesObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        status = iMessagingTonesProperty.Get(iGlobalAudioSettingsData.iMessageTones);
+        if(status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASMessageTones;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CMessagingTonesObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+	}
+
+void CMessagingTonesObserverAO::DoCancel()
+	{
+	iMessagingTonesProperty.Cancel();
+	}
+
+TInt CMessagingTonesObserverAO::RunError(TInt /*aError*/)
+	{
+	return KErrNone;
+	}
+	
+//////////////////////////////////////////////////////////////////////
+//	CSilentProfileObserverAO											//
+//////////////////////////////////////////////////////////////////////
+CSilentProfileObserverAO::CSilentProfileObserverAO(
+                                CGlobalAudioSettings &aGlobalAudioSettings,
+                                MAudioSettingsObserver& aAudioSettingsObserver,
+                                TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CSilentProfileObserverAO::~CSilentProfileObserverAO()
+	{
+	Cancel();
+	iSilentProfileProperty.Close();
+	}
+
+CSilentProfileObserverAO* CSilentProfileObserverAO::NewL(
+                                        CGlobalAudioSettings &aGlobalAudioSettings,
+                                        MAudioSettingsObserver& aAudioSettingsObserver,
+                                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+	{
+	CSilentProfileObserverAO* self = new (ELeave) CSilentProfileObserverAO(
+                    	                        aGlobalAudioSettings, aAudioSettingsObserver, 
+                    	                        aGlobalAudioSettingsData);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CSilentProfileObserverAO::ConstructL()
+	{
+	User::LeaveIfError(iSilentProfileProperty.Attach(KGASPSUidGlobalAudioSettings, KGASSilentProfile));
+	User::LeaveIfError(iSilentProfileProperty.Get(iGlobalAudioSettingsData.iSilentProfile));
+	}
+	
+void CSilentProfileObserverAO::Subscribe()
+	{
+	if (!IsActive())
+	    {
+    	SetActive();
+    	iSilentProfileProperty.Subscribe(iStatus);
+	    }
+	}
+
+void CSilentProfileObserverAO::RunL()
+	{
+	TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CSilentProfileObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        status = iSilentProfileProperty.Get(iGlobalAudioSettingsData.iSilentProfile);
+        if(status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASSilentProfile;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CSilentProfileObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+	}
+
+void CSilentProfileObserverAO::DoCancel()
+	{
+	iSilentProfileProperty.Cancel();
+	}
+
+TInt CSilentProfileObserverAO::RunError(TInt /*aError*/)
+	{
+	return KErrNone;
+	}
+	
+//////////////////////////////////////////////////////////////////////
+//	CVibraObserverAO											    //
+//////////////////////////////////////////////////////////////////////
+CVibraObserverAO::CVibraObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CVibraObserverAO::~CVibraObserverAO()
+	{
+	Cancel();
+	iVibraProperty.Close();
+	}
+
+CVibraObserverAO* CVibraObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+	{
+	CVibraObserverAO* self = new (ELeave) CVibraObserverAO(
+                	                        aGlobalAudioSettings,
+                	                        aAudioSettingsObserver, 
+                	                        aGlobalAudioSettingsData);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+void CVibraObserverAO::ConstructL()
+	{
+	User::LeaveIfError(iVibraProperty.Attach(KGASPSUidGlobalAudioSettings, KGASVibra));
+	User::LeaveIfError(iVibraProperty.Get(iGlobalAudioSettingsData.iVibra));
+	}
+	
+void CVibraObserverAO::Subscribe()
+	{
+	if (!IsActive())
+	    {
+    	SetActive();
+    	iVibraProperty.Subscribe(iStatus);
+	    }
+	}
+
+void CVibraObserverAO::RunL()
+	{
+	TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CVibraObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        status = iVibraProperty.Get(iGlobalAudioSettingsData.iVibra);
+        if( status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASVibra;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings,id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CVibraObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+	}
+
+void CVibraObserverAO::DoCancel()
+	{
+	iVibraProperty.Cancel();
+	}
+
+TInt CVibraObserverAO::RunError(TInt /*aError*/)
+	{
+	return KErrNone;
+	}
+
+//////////////////////////////////////////////////////////////////////
+//  CRingingTypeObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CRingingTypeObserverAO::CRingingTypeObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CRingingTypeObserverAO::~CRingingTypeObserverAO()
+    {
+    Cancel();
+    iRingingTypeProperty.Close();
+    }
+
+CRingingTypeObserverAO* CRingingTypeObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CRingingTypeObserverAO* self = new (ELeave) CRingingTypeObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CRingingTypeObserverAO::ConstructL()
+    {
+    User::LeaveIfError(iRingingTypeProperty.Attach(KGASPSUidGlobalAudioSettings, KGASRingingType));
+    TInt value=KErrNone;
+    User::LeaveIfError(iRingingTypeProperty.Get(value));
+    iGlobalAudioSettingsData.iRingingType=(CGlobalAudioSettings::TGASRingingType)value;
+    
+    }
+    
+void CRingingTypeObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iRingingTypeProperty.Subscribe(iStatus);
+        }
+    }
+
+void CRingingTypeObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CRingingTypeObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        TInt value=KErrNone;
+        status=(iRingingTypeProperty.Get(value));
+        iGlobalAudioSettingsData.iRingingType=(CGlobalAudioSettings::TGASRingingType)value;
+        if( status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASRingingType;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CRingingTypeObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CRingingTypeObserverAO::DoCancel()
+    {
+    iRingingTypeProperty.Cancel();
+    }
+
+TInt CRingingTypeObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+//////////////////////////////////////////////////////////////////////
+//  CMessageToneObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CMessageToneObserverAO::CMessageToneObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CMessageToneObserverAO::~CMessageToneObserverAO()
+    {
+    Cancel();
+    iMessageToneNameProperty.Close();
+    if( iGlobalAudioSettingsData.iMessageToneName)
+        {
+          delete  iGlobalAudioSettingsData.iMessageToneName;
+          iGlobalAudioSettingsData.iMessageToneName=NULL;
+        }
+    }
+
+CMessageToneObserverAO* CMessageToneObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CMessageToneObserverAO* self = new (ELeave) CMessageToneObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CMessageToneObserverAO::ConstructL()
+    {
+    iGlobalAudioSettingsData.iMessageToneName=HBufC::NewL(KMaxLength);
+    User::LeaveIfError(iMessageToneNameProperty.Attach(KGASPSUidGlobalAudioSettings, KGASMessageToneName));
+    TPtr16 ptr=iGlobalAudioSettingsData.iMessageToneName->Des();
+    User::LeaveIfError(iMessageToneNameProperty.Get(ptr));
+    
+    }
+    
+void CMessageToneObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iMessageToneNameProperty.Subscribe(iStatus);
+        }
+    }
+
+void CMessageToneObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CMessageToneObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        delete iGlobalAudioSettingsData.iMessageToneName;
+        iGlobalAudioSettingsData.iMessageToneName=NULL;
+        iGlobalAudioSettingsData.iMessageToneName=HBufC::NewL(KMaxLength);
+        TPtr16 ptr=iGlobalAudioSettingsData.iMessageToneName->Des();
+        status = iMessageToneNameProperty.Get(ptr);
+        if( status == KErrNone)
+            {
+            MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASMessageToneName;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CMessageToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CMessageToneObserverAO::DoCancel()
+    {
+    iMessageToneNameProperty.Cancel();
+    }
+
+TInt CMessageToneObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+
+/////////////////////////////////////////////////////////////////////
+//  CEmailToneObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CEmailToneObserverAO::CEmailToneObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CEmailToneObserverAO::~CEmailToneObserverAO()
+    {
+    Cancel();
+    iEmailToneNameProperty.Close();
+    
+    if(iGlobalAudioSettingsData.iEmailToneName)
+        {
+        delete  iGlobalAudioSettingsData.iEmailToneName;
+        iGlobalAudioSettingsData.iEmailToneName=NULL;
+        }
+   
+    }
+
+CEmailToneObserverAO* CEmailToneObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CEmailToneObserverAO* self = new (ELeave) CEmailToneObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CEmailToneObserverAO::ConstructL()
+    {
+    
+    iGlobalAudioSettingsData.iEmailToneName=HBufC::NewL(KMaxLength);
+    User::LeaveIfError(iEmailToneNameProperty.Attach(KGASPSUidGlobalAudioSettings, KGASEmailToneName));
+    TPtr16 ptr=iGlobalAudioSettingsData.iEmailToneName->Des();
+    User::LeaveIfError(iEmailToneNameProperty.Get(ptr));
+    
+    }
+    
+void CEmailToneObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iEmailToneNameProperty.Subscribe(iStatus);
+        }
+    }
+
+void CEmailToneObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CEmailToneObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        delete iGlobalAudioSettingsData.iEmailToneName;
+        iGlobalAudioSettingsData.iEmailToneName=NULL;
+        iGlobalAudioSettingsData.iEmailToneName=HBufC::NewL(KMaxLength);
+        TPtr16 ptr=iGlobalAudioSettingsData.iEmailToneName->Des();
+        status = iEmailToneNameProperty.Get(ptr);
+        if( status == KErrNone)
+            {
+            MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASEmailToneName;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CEmailToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CEmailToneObserverAO::DoCancel()
+    {
+    iEmailToneNameProperty.Cancel();
+    }
+
+TInt CEmailToneObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+
+/////////////////////////////////////////////////////////////////////
+//  CVideoCallToneObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CVideoCallToneObserverAO::CVideoCallToneObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CVideoCallToneObserverAO::~CVideoCallToneObserverAO()
+    {
+    Cancel();
+    iVideoCallToneNameProperty.Close();
+    if( iGlobalAudioSettingsData.iVideoCallToneName)
+        {
+    delete  iGlobalAudioSettingsData.iVideoCallToneName;
+    iGlobalAudioSettingsData.iVideoCallToneName=NULL;
+        }
+     
+    
+    }
+
+CVideoCallToneObserverAO* CVideoCallToneObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CVideoCallToneObserverAO* self = new (ELeave) CVideoCallToneObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CVideoCallToneObserverAO::ConstructL()
+    {
+    
+    iGlobalAudioSettingsData.iVideoCallToneName=HBufC::NewL(KMaxLength);
+    User::LeaveIfError(iVideoCallToneNameProperty.Attach(KGASPSUidGlobalAudioSettings, KGASVideoCallToneName));
+    TPtr16 ptr=iGlobalAudioSettingsData.iVideoCallToneName->Des();
+    User::LeaveIfError(iVideoCallToneNameProperty.Get(ptr));
+    
+    }
+    
+void CVideoCallToneObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iVideoCallToneNameProperty.Subscribe(iStatus);
+        }
+    }
+
+void CVideoCallToneObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CVideocallToneObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        delete iGlobalAudioSettingsData.iVideoCallToneName;
+        iGlobalAudioSettingsData.iVideoCallToneName=NULL;
+        iGlobalAudioSettingsData.iVideoCallToneName=HBufC::NewL(KMaxLength);
+        TPtr16 ptr=iGlobalAudioSettingsData.iVideoCallToneName->Des();
+        status = iVideoCallToneNameProperty.Get(ptr);
+        if( status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASVideoCallToneName;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CVideoCallToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CVideoCallToneObserverAO::DoCancel()
+    {
+    iVideoCallToneNameProperty.Cancel();
+    }
+
+TInt CVideoCallToneObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+/////////////////////////////////////////////////////////////////////
+//  CRingingToneObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CRingingTone1ObserverAO::CRingingTone1ObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CRingingTone1ObserverAO::~CRingingTone1ObserverAO()
+    {
+    Cancel();
+    iRingingTone1NameProperty.Close();
+    if( iGlobalAudioSettingsData.iRingingTone1Name)
+        {
+        delete  iGlobalAudioSettingsData.iRingingTone1Name;
+        iGlobalAudioSettingsData.iRingingTone1Name=NULL;
+        }
+    }
+
+CRingingTone1ObserverAO* CRingingTone1ObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CRingingTone1ObserverAO* self = new (ELeave) CRingingTone1ObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CRingingTone1ObserverAO::ConstructL()
+    {
+    
+    iGlobalAudioSettingsData.iRingingTone1Name=HBufC::NewL(KMaxLength);
+    User::LeaveIfError(iRingingTone1NameProperty.Attach(KGASPSUidGlobalAudioSettings, KGASRingingTone1Name));
+    TPtr16 ptr=iGlobalAudioSettingsData.iRingingTone1Name->Des();
+    User::LeaveIfError(iRingingTone1NameProperty.Get(ptr));
+    
+    }
+    
+void CRingingTone1ObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iRingingTone1NameProperty.Subscribe(iStatus);
+        }
+    }
+
+void CRingingTone1ObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CRingingTone1ObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        delete iGlobalAudioSettingsData.iRingingTone1Name;
+        iGlobalAudioSettingsData.iRingingTone1Name=NULL;
+        iGlobalAudioSettingsData.iRingingTone1Name=HBufC::NewL(KMaxLength);
+        TPtr16 ptr=iGlobalAudioSettingsData.iRingingTone1Name->Des();
+        status = iRingingTone1NameProperty.Get(ptr);
+        if( status == KErrNone)
+            {
+            MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASRingingTone1Name;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CRingingToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CRingingTone1ObserverAO::DoCancel()
+    {
+    iRingingTone1NameProperty.Cancel();
+    }
+
+TInt CRingingTone1ObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+////////////////////////////////////////////////////////////////////
+//  CRingingToneObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CRingingTone2ObserverAO::CRingingTone2ObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CRingingTone2ObserverAO::~CRingingTone2ObserverAO()
+    {
+    Cancel();
+    iRingingTone2NameProperty.Close();
+    if(iGlobalAudioSettingsData.iRingingTone2Name)
+        {
+    delete iGlobalAudioSettingsData.iRingingTone2Name;
+    iGlobalAudioSettingsData.iRingingTone2Name=NULL;
+        }
+     
+    
+    }
+
+CRingingTone2ObserverAO* CRingingTone2ObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CRingingTone2ObserverAO* self = new (ELeave) CRingingTone2ObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CRingingTone2ObserverAO::ConstructL()
+    {
+    
+    iGlobalAudioSettingsData.iRingingTone2Name=HBufC::NewL(KMaxLength);
+    User::LeaveIfError(iRingingTone2NameProperty.Attach(KGASPSUidGlobalAudioSettings, KGASRingingTone2Name));
+    TPtr16 ptr=iGlobalAudioSettingsData.iRingingTone2Name->Des();
+    User::LeaveIfError(iRingingTone2NameProperty.Get(ptr));
+    
+    }
+    
+void CRingingTone2ObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iRingingTone2NameProperty.Subscribe(iStatus);
+        }
+    }
+
+void CRingingTone2ObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CRingingTone2ObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        delete iGlobalAudioSettingsData.iRingingTone2Name;
+        iGlobalAudioSettingsData.iRingingTone2Name=NULL;
+        iGlobalAudioSettingsData.iRingingTone2Name=HBufC::NewL(KMaxLength);
+        TPtr16 ptr=iGlobalAudioSettingsData.iRingingTone2Name->Des();
+        status = iRingingTone2NameProperty.Get(ptr);
+        if( status == KErrNone)
+            {
+        MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASRingingTone2Name;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CRingingToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CRingingTone2ObserverAO::DoCancel()
+    {
+    iRingingTone2NameProperty.Cancel();
+    }
+
+TInt CRingingTone2ObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+/////////////////////////////////////////////////////////////////////
+//  CKeypadToneObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CKeypadToneObserverAO::CKeypadToneObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CKeypadToneObserverAO::~CKeypadToneObserverAO()
+    {
+    Cancel();
+    iKeypadToneVolumeProperty.Close();
+    }
+
+CKeypadToneObserverAO* CKeypadToneObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CKeypadToneObserverAO* self = new (ELeave) CKeypadToneObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CKeypadToneObserverAO::ConstructL()
+    {
+    
+    
+    User::LeaveIfError(iKeypadToneVolumeProperty.Attach(KGASPSUidGlobalAudioSettings, KGASKeypadToneVolume));
+    TInt value=KErrNone;
+    User::LeaveIfError(iKeypadToneVolumeProperty.Get(value));
+    iGlobalAudioSettingsData.iKeyPadVolume=(CGlobalAudioSettings::TGASKeypadVolume)value;
+    }
+    
+void CKeypadToneObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iKeypadToneVolumeProperty.Subscribe(iStatus);
+        }
+    }
+
+void CKeypadToneObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CKeypadToneObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+        TInt value=KErrNone;
+            status=iKeypadToneVolumeProperty.Get(value);
+            iGlobalAudioSettingsData.iKeyPadVolume=(CGlobalAudioSettings::TGASKeypadVolume)value;
+        
+        
+        if( status == KErrNone)
+            {
+            MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASKeyPadVolume;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CKeypadToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CKeypadToneObserverAO::DoCancel()
+    {
+    iKeypadToneVolumeProperty.Cancel();
+    }
+
+TInt CKeypadToneObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+
+/////////////////////////////////////////////////////////////////////
+//  CSilenceModeObserverAO                                                //
+//////////////////////////////////////////////////////////////////////
+CSilenceModeObserverAO::CSilenceModeObserverAO(
+                        CGlobalAudioSettings &aGlobalAudioSettings,
+                        MAudioSettingsObserver& aAudioSettingsObserver,
+                        TGlobalAudioSettings& aGlobalAudioSettingsData)
+:CActive(EPriorityStandard),
+ iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver),
+ iGlobalAudioSettingsData(aGlobalAudioSettingsData)
+    {
+    CActiveScheduler::Add(this);
+    }
+
+CSilenceModeObserverAO::~CSilenceModeObserverAO()
+    {
+    Cancel();
+    iSilenceModeProperty.Close();
+    }
+
+CSilenceModeObserverAO* CSilenceModeObserverAO::NewL(
+                            CGlobalAudioSettings &aGlobalAudioSettings,
+                            MAudioSettingsObserver& aAudioSettingsObserver,
+                            TGlobalAudioSettings& aGlobalAudioSettingsData)
+    {
+    CSilenceModeObserverAO* self = new (ELeave) CSilenceModeObserverAO(
+                                            aGlobalAudioSettings,
+                                            aAudioSettingsObserver, 
+                                            aGlobalAudioSettingsData);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+void CSilenceModeObserverAO::ConstructL()
+    {
+    
+    
+    User::LeaveIfError(iSilenceModeProperty.Attach(KGASPSUidGlobalAudioSettings, KGASSilenceMode));
+   
+    User::LeaveIfError(iSilenceModeProperty.Get(iGlobalAudioSettingsData.iSilenceMode));
+    RDebug::Printf("in constructL,silence mode %d",iGlobalAudioSettingsData.iSilenceMode);
+  
+    }
+    
+void CSilenceModeObserverAO::Subscribe()
+    {
+    if (!IsActive())
+        {
+        SetActive();
+        
+        iSilenceModeProperty.Subscribe(iStatus);
+        }
+    }
+
+void CSilenceModeObserverAO::RunL()
+    {
+    TInt status(iStatus.Int());
+#ifdef PRINT_MESSAGE
+    RDebug::Print(_L(" CSilenceModeObserverAO::RunL:iStatus[%d]"), status);
+#endif // PRINT_MESSAGE
+    if ( status == KErrNone )
+        {
+        Subscribe();
+       
+            status=iSilenceModeProperty.Get(  iGlobalAudioSettingsData.iSilenceMode);
+            RDebug::Printf("value of silent mode :%d",iGlobalAudioSettingsData.iSilenceMode);
+        
+        
+        if( status == KErrNone)
+            {
+            MAudioSettingsObserver::TGASEventId id=MAudioSettingsObserver::EGASSilenceMode;
+            iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, id);
+            }
+#ifdef PRINT_MESSAGE
+        else
+            {
+            RDebug::Print(_L(" CKeypadToneObserverAO::RunL:Property.Get Error[%d]"), status);
+            }
+#endif // PRINT_MESSAGE
+        }
+    }
+
+void CSilenceModeObserverAO::DoCancel()
+    {
+    iSilenceModeProperty.Cancel();
+    }
+
+TInt CSilenceModeObserverAO::RunError(TInt /*aError*/)
+    {
+    return KErrNone;
+    }
+
+//End of file