mmfenh/profilesettingsmonitor/src/ProfileSettingsMonitorServerImpl.cpp
changeset 0 71ca22bcf22a
child 38 9e9fc5ab059f
child 45 095bea5f582e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/profilesettingsmonitor/src/ProfileSettingsMonitorServerImpl.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2007 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:  This file contains implementation of 
+                    ProfileSettingsMonitorServerImpl.
+*
+*/
+
+
+#include "ProfileSettingsMonitorServerImpl.h"
+#include <AudioClientsListPSKeys.h>
+#include <AudioClientsListPSData.h>
+#include <MediaStreamPropertiesPSKeys.h>
+
+#ifdef _DEBUG
+#define DEB_TRACE0(str)             RDebug::Print(str)
+#define DEB_TRACE1(str, val1)       RDebug::Print(str, val1)
+#else
+#define DEB_TRACE0(str)
+#define DEB_TRACE1(str, val1)
+#endif // _DEBUG
+
+
+static _LIT_SECURITY_POLICY_PASS(KClientStateReadPolicy);
+static _LIT_SECURITY_POLICY_S0(KMMFAudioServerSIDPolicy, KUidMmfAudioServerDllUnicodeDefine);
+
+
+CProfileSettingsMonitorServerImpl::CProfileSettingsMonitorServerImpl()
+	{
+	}
+
+CProfileSettingsMonitorServerImpl::~CProfileSettingsMonitorServerImpl()
+	{
+	iWarningTonesProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASWarningTones);
+	
+	iMessagingTonesProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASMessageTones);
+	
+	iSilentProfileProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASSilentProfile);
+	
+	iVibraProperty.Close();
+	RProperty::Delete(KGASPSUidGlobalAudioSettings, KGASVibra);
+	
+	// Release profile engine resources
+	if ( iEngine )
+	    {
+	    iEngine->Release();
+	    }
+	delete iEngine;
+	delete iNotifyHandler;
+	}
+
+CProfileSettingsMonitorServerImpl* CProfileSettingsMonitorServerImpl::NewL()
+	{
+	CProfileSettingsMonitorServerImpl* s = new(ELeave) CProfileSettingsMonitorServerImpl();
+	CleanupStack::PushL(s);
+	s->ConstructL();
+	CleanupStack::Pop();
+	return s;
+	}
+
+void CProfileSettingsMonitorServerImpl::ConstructL()
+	{
+    iEngine = ProEngFactory::NewEngineL();
+    iNotifyHandler = ProEngFactory::NewNotifyHandlerL();    
+    User::LeaveIfError( iNotifyHandler->RequestProfileActivationNotificationsL( *this ));    
+    User::LeaveIfError( iNotifyHandler->RequestActiveProfileNotificationsL( *this ));
+    
+    // Initialize iSilentProfile
+    iActiveProfileId = iEngine->ActiveProfileId();
+    if(iActiveProfileId == 1) 
+        iSilentProfile = ETrue;
+    else
+        iSilentProfile = EFalse;
+    
+    // Initialize iWarningTones, iMessagingTones and iVibra
+    MProEngProfile* currentProfile = iEngine->ActiveProfileL();
+    //CleanupStack::PushL(currentProfile);
+    MProEngToneSettings& settings = currentProfile->ToneSettings();
+    iWarningTones = settings.WarningAndGameTones();
+    iMessagingTones = !( currentProfile->IsSilent() );
+    iVibra = settings.VibratingAlert();
+    //CleanupStack::PopAndDestroy(currentProfile);
+    
+    // Get PublicSilence from CenRep
+    TInt featureBitmask( 0 );     
+    CRepository* profileCenRep = CRepository::NewL( KCRUidProfilesLV );
+    CleanupStack::PushL(profileCenRep);
+    User::LeaveIfError( profileCenRep->Get( KProfilesLVFlags, featureBitmask ) );
+    if  ( featureBitmask & KProEngFeatureIdForceSilentMode )
+        iPublicSilence = ETrue;
+    else
+        iPublicSilence = EFalse;
+    CleanupStack::PopAndDestroy(profileCenRep);
+    
+    TSecurityPolicy read = TSecurityPolicy(ECapabilityWriteDeviceData);
+    TSecurityPolicy write = TSecurityPolicy(ECapabilityMultimediaDD);
+
+    // Define and Initialize Warning Tones PnS key
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASWarningTones,
+                                    RProperty::EInt,
+                                    read,
+                                    write));	    
+    User::LeaveIfError(iWarningTonesProperty.Attach(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASWarningTones));
+    User::LeaveIfError(iWarningTonesProperty.Set(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASWarningTones,
+                                                iWarningTones));
+    
+    // Define and Initialize Messaging Tones PnS key
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASMessageTones,
+                                    RProperty::EInt,
+                                    read,
+                                    write));
+    User::LeaveIfError(iMessagingTonesProperty.Attach(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASMessageTones));
+    User::LeaveIfError(iMessagingTonesProperty.Set(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASMessageTones,
+                                                iMessagingTones));
+    
+    // Define and Initialize Silent Profile PnS key
+     User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASSilentProfile,
+                                    RProperty::EInt,
+                                    read,
+                                    write));
+    User::LeaveIfError(iSilentProfileProperty.Attach(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASSilentProfile));
+    User::LeaveIfError(iSilentProfileProperty.Set(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASSilentProfile,
+                                                iSilentProfile));
+    
+    // Define and Initialize Vibra PnS key
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASVibra,
+                                    RProperty::EInt,
+                                    read,
+                                    write));
+    User::LeaveIfError(iVibraProperty.Attach(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASVibra));
+    User::LeaveIfError(iVibraProperty.Set(
+                                        KGASPSUidGlobalAudioSettings,
+                                        KGASVibra,
+                                        iVibra));
+                        
+    // Define and Initialize Public Silence PnS key
+    User::LeaveIfError(RProperty::Define(
+                                    KGASPSUidGlobalAudioSettings,
+                                    KGASPublicSilence,
+                                    RProperty::EInt,
+                                    read,
+                                    write));
+    User::LeaveIfError(iPublicSilenceProperty.Attach(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASPublicSilence));
+    User::LeaveIfError(iPublicSilenceProperty.Set(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASPublicSilence,
+                                                iPublicSilence));
+
+    //Stream Gain Control
+    TInt status = RProperty::Define(
+                                KPSUidMediaStreamProperties,
+                                KMediaStreamCurrentGain,
+                                RProperty::EInt,
+                                read,
+                                write);
+    if ( status != KErrAlreadyExists )
+	    User::LeaveIfError(status);
+
+    // Audio Clients List
+    InitializeAudioClientsListPSKeysL();
+    }
+
+void CProfileSettingsMonitorServerImpl::InitializeAudioClientsListPSKeysL()
+    {
+    DEB_TRACE0(_L("CProfileSettingsMonitorServerImpl::InitializeAudioClientsListPSKeysL:Enter"));
+	// define KAudioPolicyApplicationAudioStatePlaying property to be a byte array
+	TInt status = RProperty::Define(KPSUidMMFAudioServer,
+	                                KAudioPolicyApplicationAudioStatePlaying,
+	                                RProperty::EByteArray,
+		                            KClientStateReadPolicy,
+		                            KMMFAudioServerSIDPolicy,
+		                            sizeof(struct TAudioPolicyProcessIdListStruct));
+	DEB_TRACE1(_L("Define KAudioPolicyApplicationAudioStatePlaying returns %d"), status);
+	if (status != KErrAlreadyExists)
+	    {
+	    User::LeaveIfError(status);
+	    }
+
+	// define KAudioPolicyApplicationAudioStateRecording property to be a byte array
+	status = RProperty::Define(KPSUidMMFAudioServer,
+	                           KAudioPolicyApplicationAudioStateRecording,
+	                           RProperty::EByteArray,
+	                           KClientStateReadPolicy,
+	                           KMMFAudioServerSIDPolicy,
+	                           sizeof(struct TAudioPolicyProcessIdListStruct));
+	DEB_TRACE1(_L("Define KAudioPolicyApplicationAudioStateRecording returns %d"), status);
+	if (status != KErrAlreadyExists)
+	    {
+	    User::LeaveIfError(status);
+	    }
+
+	// define KAudioPolicyApplicationAudioStatePaused property to be a byte array
+	status = RProperty::Define(KPSUidMMFAudioServer,
+	                           KAudioPolicyApplicationAudioStatePaused,
+	                           RProperty::EByteArray,
+	                           KClientStateReadPolicy,
+	                           KMMFAudioServerSIDPolicy,
+	                           sizeof(struct TAudioPolicyProcessIdListStruct));
+	DEB_TRACE1(_L("Define KAudioPolicyApplicationAudioStatePaused returns %d"), status);
+	if (status != KErrAlreadyExists)
+    	{
+    	User::LeaveIfError(status);
+    	}
+
+	// define KAudioPolicyForceMutedClients property to be a byte array
+	status = RProperty::Define(KPSUidMMFAudioServer,
+	                           KAudioPolicyForceMutedClients,
+	                           RProperty::EByteArray,
+	                           KClientStateReadPolicy,
+	                           KMMFAudioServerSIDPolicy,
+	                           sizeof(struct TAudioPolicyProcessIdListStruct));
+	DEB_TRACE1(_L("Define KAudioPolicyForceMutedClients returns %d"), status);
+	if (status != KErrAlreadyExists)
+    	{
+    	User::LeaveIfError(status);
+    	}
+
+	// define KAudioPolicyAudioClients property to be a byte array
+	status = RProperty::Define(KPSUidMMFAudioServer,
+	                           KAudioPolicyAudioClients,
+	                           RProperty::EByteArray,
+	                           KClientStateReadPolicy,
+	                           KMMFAudioServerSIDPolicy,
+	                           sizeof(struct TAudioClientListStruct));
+	DEB_TRACE1(_L("Define KAudioPolicyAudioClients returns %d"), status);
+	if (status != KErrAlreadyExists)
+    	{
+    	User::LeaveIfError(status);
+    	}
+    DEB_TRACE0(_L("CProfileSettingsMonitorServerImpl::InitializeAudioClientsListPSKeysL:Exit"));
+    }
+
+void CProfileSettingsMonitorServerImpl::HandleProfileActivatedL( TInt aProfileId )
+    {
+    DEB_TRACE1(_L("CProfileSettingsMonitorServerImpl::HandleProfileActivatedL[%d]"), aProfileId);
+    
+    if ( iActiveProfileId != aProfileId )
+        {
+        MProEngProfile* currentProfile = iEngine->ActiveProfileL();
+        CleanupReleasePushL(*currentProfile);
+        
+        TBool silentProfile;
+        iActiveProfileId = aProfileId;
+        //iActiveProfileId = iEngine->ActiveProfileId();
+        
+        if(iActiveProfileId == 1) // Silent profile is always '1'
+            silentProfile = ETrue;
+        else
+            silentProfile = EFalse;
+        
+        if(silentProfile != iSilentProfile)
+            {
+            iSilentProfile = silentProfile;
+            User::LeaveIfError(iSilentProfileProperty.Set(
+                                                        KGASPSUidGlobalAudioSettings,
+                                                        KGASSilentProfile,
+                                                        iSilentProfile));
+            }
+            
+        MProEngToneSettings& settings = currentProfile->ToneSettings();
+        
+        if(iWarningTones != settings.WarningAndGameTones())
+            {
+            iWarningTones = settings.WarningAndGameTones();
+            User::LeaveIfError(iWarningTonesProperty.Set(
+                                                        KGASPSUidGlobalAudioSettings,
+                                                        KGASWarningTones,
+                                                        iWarningTones));
+            }
+        
+        if(iMessagingTones != (!( currentProfile->IsSilent() )))
+            {
+            iMessagingTones = !( currentProfile->IsSilent() );
+            User::LeaveIfError(iMessagingTonesProperty.Set(
+                                                        KGASPSUidGlobalAudioSettings,
+                                                        KGASMessageTones,
+                                                        iMessagingTones));
+            }
+        if(iVibra != settings.VibratingAlert())
+            {
+            iVibra = settings.VibratingAlert();
+            User::LeaveIfError(iVibraProperty.Set(
+                                                KGASPSUidGlobalAudioSettings,
+                                                KGASVibra,
+                                                iVibra));
+            }
+        CleanupStack::PopAndDestroy(currentProfile);
+        }
+#ifdef _DEBUG
+    else
+        {
+        RDebug::Print(_L("CProfileSettingsMonitorServerImpl::HandleProfileActivatedL[%d]- \
+            Activated is same as current profile"), aProfileId);
+        }
+#endif // _DEBUG    
+    }
+
+void CProfileSettingsMonitorServerImpl::HandleProfileActivationNotificationError( TInt /*aError*/ )
+    {
+    DEB_TRACE0(_L("CMyProfileNameArrayObserver::HandleProfileActivationNotificationError"));
+	}
+
+void CProfileSettingsMonitorServerImpl::HandleActiveProfileModifiedL()
+    {
+    DEB_TRACE0(_L("CProfileSettingsMonitorServerImpl::HandleActiveProfileModifiedL"));
+    
+    iActiveProfileId = iEngine->ActiveProfileId();
+    MProEngProfile* currentProfile = iEngine->ActiveProfileL();
+    CleanupReleasePushL(*currentProfile);
+    
+    MProEngToneSettings& settings = currentProfile->ToneSettings();
+    if(iWarningTones != settings.WarningAndGameTones())
+        {
+        iWarningTones = settings.WarningAndGameTones();
+        User::LeaveIfError(iWarningTonesProperty.Set(
+                                                    KGASPSUidGlobalAudioSettings,
+                                                    KGASWarningTones,
+                                                    iWarningTones));
+        }
+    if(iMessagingTones != (!( currentProfile->IsSilent() )))
+        {
+        iMessagingTones = !( currentProfile->IsSilent() );
+        User::LeaveIfError(iMessagingTonesProperty.Set(
+                                                    KGASPSUidGlobalAudioSettings,
+                                                    KGASMessageTones,
+                                                    iMessagingTones));
+        }
+
+    if(iVibra != settings.VibratingAlert())
+        {
+        iVibra = settings.VibratingAlert();
+        User::LeaveIfError(iVibraProperty.Set(
+                                            KGASPSUidGlobalAudioSettings,
+                                            KGASVibra,
+                                            iVibra));
+        }
+    CleanupStack::PopAndDestroy(currentProfile);
+    }
+
+void CProfileSettingsMonitorServerImpl::HandleActiveProfileNotificationError( TInt /*aError*/ )
+    {
+    DEB_TRACE0(_L("CMyProfileNameArrayObserver::HandleProfileActivationNotificationError"));
+	}
+
+// End of file
+