phoneengine/phonemodel/src/cpeprofilesettingmonitor.cpp
changeset 0 5f000ab63145
child 21 92ab7f8d0eab
child 61 41a7f70b3818
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/phonemodel/src/cpeprofilesettingmonitor.cpp	Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,179 @@
+/*
+* 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 module contains the implementation of CPEProfileSettingMonitor
+*                class 
+*
+*/
+
+
+// INCLUDE FILES
+#include "cpeprofilesettingmonitor.h"
+#include "mpephonemodelinternal.h"
+#include <mpedatastore.h>
+#include <MProfileExtraTones.h>
+#include <talogger.h>
+
+
+/////////////////////////////////////////////////////////////////////////
+// CPEProfileSettingMonitor
+/////////////////////////////////////////////////////////////////////////
+
+CPEProfileSettingMonitor* CPEProfileSettingMonitor::NewL(
+        MPEPhoneModelInternal& aModel )
+    {
+    TEFLOGSTRING( KTAOBJECT, "PE CPEProfileSettingMonitor::NewL" );
+    CPEProfileSettingMonitor* self = new ( ELeave ) CPEProfileSettingMonitor( aModel );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return ( self );                                                         
+    }
+
+// Destructor
+CPEProfileSettingMonitor::~CPEProfileSettingMonitor( )
+    {
+    TEFLOGSTRING( KTAOBJECT, "PE CPEProfileSettingMonitor::~CPEProfileSettingMonitor" );
+    if ( iProfileEventHandler )
+        {
+        delete iProfileEventHandler;
+        iProfileEventHandler = NULL;
+        }
+    if ( iProfileEngine )
+        {
+        iProfileEngine->Release();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPEProfileSettingMonitor::CPEProfileSettingMonitor
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEProfileSettingMonitor::CPEProfileSettingMonitor(
+        MPEPhoneModelInternal& aModel
+        ) : iModel( aModel )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPEProfileSettingMonitor::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPEProfileSettingMonitor::ConstructL()
+    {
+    // Create the profile engine
+    iProfileEngine = CreateProfileEngineL();
+    
+    // Retrieve current profile settings    
+    GetProfileSettingsL();
+    
+    iModel.SendMessage( MEngineMonitor::EPEMessageProfileChanged ); 
+    
+    // Start listening for profiles change notifications
+    iProfileEventHandler = CProfileChangeNotifyHandler::NewL( this );    
+    }
+
+// -----------------------------------------------------------------------------
+// CPEProfileSettingMonitor::GetProfileSettingsL
+// Retrieves settings from profiles that are relevant to Phone Engine
+// Called on construction and whenever notification is received that
+// a change has occurred to the profile settings
+// -----------------------------------------------------------------------------
+//
+void CPEProfileSettingMonitor::GetProfileSettingsL()
+    {
+    TEFLOGSTRING( KTAINT, "PE CPEProfileSettingMonitor::GetProfileSettings" );
+    __UHEAP_MARK;
+    //  Get a pointer to the active profile (with ownership)
+    MProfile* activeProfile = iProfileEngine->ActiveProfileLC();
+    
+    // Get profile id
+    iModel.DataStore()->SetProfileId( activeProfile->ProfileName().Id() );
+    // Get profile name
+    iModel.DataStore()->SetProfileName( activeProfile->ProfileName().Name() );
+    
+    const MProfileTones& activeTones = activeProfile->ProfileTones();
+    
+    // Get ringtones for line 1 and 2
+    iModel.DataStore()->SetRingingTone1( activeTones.RingingTone1() );
+    iModel.DataStore()->SetRingingTone2( activeTones.RingingTone2() );
+    
+    // Get video call ringing tone, if it is supported
+    if ( iProfileEngine->IsFeatureSupported( EProfileFeatureVTRingingTone ) )
+        {
+        const MProfileExtraTones& extraTones = activeProfile->ProfileExtraTones();
+        iModel.DataStore()->SetVideoCallRingingTone( 
+            extraTones.VideoCallRingingTone() );
+        }
+    const TProfileToneSettings& toneSettings = activeTones.ToneSettings();  
+    
+    // Get ringing type and volume and keypad volume
+    TProfileRingingType ringingType = toneSettings.iRingingType;    
+    iModel.DataStore()->SetRingingType( static_cast<TProfileRingingType>( ringingType ) );
+    iModel.DataStore()->SetRingingVolume( toneSettings.iRingingVolume );
+    iModel.DataStore()->SetTextToSpeech( toneSettings.iTextToSpeech );
+                  
+    TProfileKeypadVolume keypadVolume = toneSettings.iKeypadVolume;
+    	
+    if ( keypadVolume < EProfileKeypadVolumeOff 
+        || keypadVolume > EProfileKeypadVolumeLevel3 )
+	    {
+        // Value is out of range - use default
+		keypadVolume = EProfileKeypadVolumeLevel2; // default value
+	    }
+	
+	const TInt KKeypadVolume[4] = {0, 2, 5, 10}; // Previous PE settings
+	TInt volume = KKeypadVolume[ keypadVolume ];
+	iModel.DataStore()->SetKeypadVolume( volume );
+
+    //  Get alert for group Ids
+    iModel.DataStore()->SetAlertForGroup( activeProfile->AlertForL() );
+
+    // Pop( activeProfile ) does not recognize ActiveProfileLC created 
+    // item because of casting. However, functionality and cleanup works OK.
+    CleanupStack::Pop(); // activeProfile
+	activeProfile->Release();
+	__UHEAP_MARKEND;
+    }
+
+// -----------------------------------------------------------------------------
+// CPEProfileSettingMonitor::HandleActiveProfileEventL
+// Callback function - implements virtual function from MProfileChangeObserver
+// This is called whenever profiles settings change
+// We're not interested in aProfileId which identifies the number of the active profile changed
+// This notifier doesn't identify the property changed - so update them all by 
+// calling the GetProfileSettingsL() method
+// -----------------------------------------------------------------------------
+//
+void CPEProfileSettingMonitor::HandleActiveProfileEventL(
+        TProfileEvent aProfileEvent,
+        TInt /*aProfileId*/ )
+    {
+    TEFLOGSTRING2( KTAINT, "PE CPEProfileSettingMonitor::HandleActiveProfileEventL %d", aProfileEvent );
+    
+    ASSERT( aProfileEvent != EProfileUnknownEvent );
+    
+    // Update the iEngineInfo with the required profile settings    
+    GetProfileSettingsL();
+    
+    if ( aProfileEvent != EProfileUnknownEvent )
+        {
+        // A new profile has been set
+        iModel.SendMessage( MEngineMonitor::EPEMessageProfileChanged );        
+        }        
+    }
+
+// End of file