diff -r 000000000000 -r 40261b775718 devsoundextensions/globalaudiosettings/src/GlobalAudioSettingsImpl.cpp --- /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 +#include +#include +#include +#include "AudioClientsListManagerAO.h" +#include + +#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& 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