--- /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
+