--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/src/BavpVolumeHandler.cpp Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,178 @@
+/*
+* 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 the License "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: Handles the volume, gets the initial volume from central
+* repository and monitors changes in volume.
+*
+*/
+
+
+#include <centralrepository.h>
+#include <ProfileEngineSDKCRKeys.h>
+#include <BrowserUiSDKCRKeys.h>
+
+#include "BavpLogger.h"
+#include "BavpVolumeHandler.h"
+#include "BavpVolumeObserver.h"
+
+
+// -----------------------------------------------------------------------------
+// CBavpVolumeHandler::NewL
+// Two-phased constructor.
+// ----------------------------------------------------------------------------
+CBavpVolumeHandler* CBavpVolumeHandler::NewL( MBavpVolumeObserver* aObserver )
+ {
+ Log( EFalse, _L("CBavpVolumeHandler::NewL") );
+
+ CBavpVolumeHandler* self = new (ELeave) CBavpVolumeHandler( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpVolumeHandler::CBavpVolumeHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+CBavpVolumeHandler::CBavpVolumeHandler( MBavpVolumeObserver* aObserver )
+ : iObserver( aObserver )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CBavpVolumeHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+void CBavpVolumeHandler::ConstructL()
+ {
+ Log( EFalse, _L("CBavpVolumeHandler::ConstructL") );
+
+ iCurrentVolume = KCRVolume5;
+ iCurrentProfile = KGeneralProfile;
+
+ // Get volume settings from central repository
+ iVolumeRepository = CRepository::NewL( KCRUidBrowser );
+ iVolumeRepository->Get( KBrowserMediaVolumeControl, iCurrentVolume );
+
+ // If media volume key exists, watch it for changes
+ iVolumeCRHandler = CCenRepNotifyHandler::NewL( *this, *iVolumeRepository,
+ CCenRepNotifyHandler::EIntKey,
+ (TUint32)KBrowserMediaVolumeControl);
+ iVolumeCRHandler->StartListeningL();
+ iPreviousVolume = iCurrentVolume;
+
+ // Get the current profile
+ iProfileRepository = CRepository::NewL( KCRUidProfileEngine );
+ iProfileRepository->Get( KProEngActiveProfile, iCurrentProfile );
+
+ // Watch the Profile changes using a CR Notify Handler
+ iProfileCRHandler = CCenRepNotifyHandler::NewL( *this, *iProfileRepository,
+ CCenRepNotifyHandler::EIntKey,
+ (TUint32)KProEngActiveProfile );
+ iProfileCRHandler->StartListeningL();
+
+ // Now that we have initial volume and profile, lets use them.
+ // Check if we're in Silent profile or Meeting profile.
+ if ( iCurrentProfile == KSilentProfile ||
+ iCurrentProfile == KMeetingProfile )
+ {
+ // Mute the volume, we already saved the CR volume
+ // as iPreviousVolume
+ iCurrentVolume = KCRVolumeMute;
+ }
+
+ // Tell observer (BavpController) the initial volume
+ if ( iObserver )
+ {
+ iObserver->UpdateVolume( iCurrentVolume );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpVolumeHandler::~CBavpVolumeHandler
+// Destructor
+// ----------------------------------------------------------------------------
+CBavpVolumeHandler::~CBavpVolumeHandler()
+ {
+ Log( EFalse, _L("CBavpVolumeHandler::~CBavpVolumeHandler") );
+
+ // Clean up the media volume CR and CR Handler
+ if ( iVolumeCRHandler )
+ {
+ iVolumeCRHandler->StopListening();
+ delete iVolumeCRHandler;
+ }
+
+ delete iVolumeRepository;
+
+ // Clean up the Profile CR and CR Handler
+ if ( iProfileCRHandler )
+ {
+ iProfileCRHandler->StopListening();
+ delete iProfileCRHandler;
+ }
+
+ delete iProfileRepository;
+
+ }
+
+// ----------------------------------------------------------------------------
+// CBavpVolumeHandler::HandleNotifyInt()
+// Handles volume and profile changes in CR
+// ----------------------------------------------------------------------------
+void CBavpVolumeHandler::HandleNotifyInt( const TUint32 aKeyId, TInt aNewValue )
+ {
+ if ( aKeyId == KBrowserMediaVolumeControl && aNewValue != iCurrentVolume )
+ {
+ // Media Volume property updated, and it changed
+ if ( iCurrentProfile == KSilentProfile ||
+ iCurrentProfile == KMeetingProfile )
+ {
+ // We got a new volume, and Profile is "quiet", save and use later
+ iPreviousVolume = aNewValue;
+ }
+ else
+ {
+ // We got a new volume and Profile allows us to use it
+ iCurrentVolume = aNewValue;
+ }
+ }
+ else if ( aKeyId == KProEngActiveProfile && aNewValue != iCurrentProfile )
+ {
+ // Profile property updated, and it changed
+ iCurrentProfile = aNewValue;
+
+ // If we got a change in profile, mute or unmute
+ if ( iCurrentProfile == KSilentProfile ||
+ iCurrentProfile == KMeetingProfile )
+ {
+ // Mute the volume
+ iPreviousVolume = iCurrentVolume;
+ iCurrentVolume = KCRVolumeMute;
+ }
+ else // Unmute the volume
+ {
+ iCurrentVolume = iPreviousVolume;
+ }
+ }
+
+ // Tell observer the new volume
+ if ( iObserver )
+ {
+ iObserver->UpdateVolume( iCurrentVolume );
+ }
+ }
+
+// End of file