--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/globalaudiosettings/src/GlobalAudioSettingsImpl.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,593 @@
+/*
+* 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
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::NewL();
+//
+// -----------------------------------------------------------------------------
+//
+CGlobalAudioSettingsImpl::CGlobalAudioSettingsImpl(
+ CGlobalAudioSettings &aGlobalAudioSettings,
+ MAudioSettingsObserver& aAudioSettingsObserver)
+:iGlobalAudioSettings(aGlobalAudioSettings),
+ iAudioSettingsObserver(aAudioSettingsObserver)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::NewL();
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C 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()
+ {
+ 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();
+
+ 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
+EXPORT_C CGlobalAudioSettingsImpl::~CGlobalAudioSettingsImpl()
+ {
+ delete iWarningTonesObserverAO;
+ delete iMessagingTonesObserverAO;
+ delete iSilentProfileObserverAO;
+ delete iVibraObserverAO;
+ delete iCAudioClientsListManagerAO;
+ delete iPausedClientsListManagerAO;
+ iAudioClientsListObserverArray.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::NewL
+// Static function for creating an instance of the EnvironmentalReverb object.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGlobalAudioSettingsImpl::IsWarningTonesEnabled()
+ {
+ if(iGlobalAudioSettingsData.iWarningTones)
+ return(ETrue);
+ else
+ return(EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsMessageTonesEnabled
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGlobalAudioSettingsImpl::IsMessageTonesEnabled()
+ {
+ if(iGlobalAudioSettingsData.iMessageTones)
+ return(ETrue);
+ else
+ return(EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsSilentProfileEnabled
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGlobalAudioSettingsImpl::IsSilentProfileEnabled()
+ {
+ if(iGlobalAudioSettingsData.iSilentProfile)
+ return(ETrue);
+ else
+ return(EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsVibraEnabled
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGlobalAudioSettingsImpl::IsVibraEnabled()
+ {
+ if(iGlobalAudioSettingsData.iVibra)
+ return(ETrue);
+ else
+ return(EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// CGlobalAudioSettingsImpl::IsPublicSilenceEnabled
+//
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CGlobalAudioSettingsImpl::IsPublicSilenceEnabled()
+ {
+ if(iGlobalAudioSettingsData.iPublicSilence)
+ return(ETrue);
+ else
+ return(EFalse);
+ }
+
+// -----------------------------------------------------------------------------
+// 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;
+
+
+ }
+
+//////////////////////////////////////////////////////////////////////
+// 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)
+ {
+ iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, MAudioSettingsObserver::KWarningTones );
+ }
+#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)
+ {
+ iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, MAudioSettingsObserver::KMessageTones);
+ }
+#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)
+ {
+ iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, MAudioSettingsObserver::KSilentProfile);
+ }
+#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)
+ {
+ iAudioSettingsObserver.SettingsChanged(iGlobalAudioSettings, MAudioSettingsObserver::KVibra);
+ }
+#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;
+ }
+
+//End of file