profilesservices/ProfileEngine/EngSrc/CProfileTonesImpl.cpp
changeset 0 8c5d936e5675
child 24 8ee96d21d9bf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/ProfileEngine/EngSrc/CProfileTonesImpl.cpp	Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,376 @@
+/*
+* Copyright (c) 2002 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 CProfileTonesImpl
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CProfileTonesImpl.h"
+#include <s32strm.h>
+#include <centralrepository.h>
+#include "ProfileEngUtils.h"
+#include "ProfileEnginePrivateCRKeys.h"
+#include <hwrmvibrasdkcrkeys.h>
+
+#include <psmsettings.h>
+#include <psmsrvdomaincrkeys.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::ConstructL()
+    {
+    const TDesC& des = KNullDesC();
+    iRingingTone1 = des.AllocL();
+    iRingingTone2 = des.AllocL();
+    iMessageAlertTone = des.AllocL();
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::ConstructL(
+    const MProfileTones& aProfileTones )
+    {
+    iRingingTone1 = aProfileTones.RingingTone1().AllocL();
+    iRingingTone2 = aProfileTones.RingingTone1().AllocL();
+    iMessageAlertTone = aProfileTones.MessageAlertTone().AllocL();
+    iProfileToneSettings = aProfileTones.ToneSettings();
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CProfileTonesImpl* CProfileTonesImpl::NewL()
+    {
+    CProfileTonesImpl* self = new( ELeave ) CProfileTonesImpl;
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CProfileTonesImpl* CProfileTonesImpl::NewL(
+    const MProfileTones& aProfileTones )
+    {
+    CProfileTonesImpl* self = new( ELeave ) CProfileTonesImpl;
+
+    CleanupStack::PushL( self );
+    self->ConstructL( aProfileTones );
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// Destructor
+CProfileTonesImpl::~CProfileTonesImpl()
+    {
+    delete iRingingTone1;
+    delete iRingingTone2;
+    delete iMessageAlertTone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::InternalizeL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::InternalizeL( CRepository& aCenRep, TInt aProfileId )
+    {
+    delete iRingingTone1;
+    iRingingTone1 = NULL;
+    delete iRingingTone2;
+    iRingingTone2 = NULL;
+    delete iMessageAlertTone;
+    iMessageAlertTone = NULL;
+    TFileName toneFile;
+
+    // Ringing tone 1
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngRingingTone,
+            aProfileId ), toneFile ) );
+    iRingingTone1 = toneFile.AllocL();
+
+    // Ringing tone 2
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngRingingTone2,
+            aProfileId ), toneFile ) );
+    iRingingTone2 = toneFile.AllocL();
+
+    // Message alert tone
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngMsgTone,
+            aProfileId ), toneFile ) );
+    iMessageAlertTone = toneFile.AllocL();
+
+    // Settings
+    TInt value( 0 );
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngRingingType,
+            aProfileId ), value ) );
+    iProfileToneSettings.iRingingType = TProfileRingingType( value );
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngKeypadVolume,
+            aProfileId ), value ) );
+    iProfileToneSettings.iKeypadVolume = TProfileKeypadVolume( value );
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngRingingVolume,
+            aProfileId ), iProfileToneSettings.iRingingVolume ) );
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngVibra,
+            aProfileId ), iProfileToneSettings.iVibratingAlert ) );
+    User::LeaveIfError(
+          aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngEmailVibra,
+           aProfileId ), iProfileToneSettings.iEmailVibratingAlert ) );   
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngWarnAndGameTones,
+            aProfileId ), iProfileToneSettings.iWarningAndGameTones ) );
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngMediaVolume,
+            aProfileId ), iProfileToneSettings.iMediaVolume ) );
+    User::LeaveIfError(
+            aCenRep.Get( ProfileEngUtils::ResolveKey( KProEngTextToSpeechTone,
+            aProfileId ), iProfileToneSettings.iTextToSpeech ) );
+            
+    InitPowerSaveMode();
+
+    if ( iPowerSaveMode )
+        {
+        iProfileToneSettings.iVibratingAlert = iPsmConfigVibra;
+        iProfileToneSettings.iEmailVibratingAlert = iPsmConfigVibra;
+        iProfileToneSettings.iKeypadVolume = 
+                             TProfileKeypadVolume( iPsmConfigKeypadVolume );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::ExternalizeL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::ExternalizeL( CRepository& aCenRep, TInt aProfileId ) const
+    {
+    // Ringing tone 1
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngRingingTone,
+            aProfileId ), *iRingingTone1 ) );
+
+    // Ringing tone 2
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngRingingTone2,
+            aProfileId ), *iRingingTone2 ) );
+
+    // Message alert tone
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngMsgTone,
+            aProfileId ), *iMessageAlertTone ) );
+
+    // Tone Settings
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngRingingType,
+            aProfileId ), iProfileToneSettings.iRingingType ) );
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngKeypadVolume,
+            aProfileId ), iProfileToneSettings.iKeypadVolume ) );
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngRingingVolume,
+            aProfileId ), iProfileToneSettings.iRingingVolume ) );
+    
+    if ( !ProfileEngUtils::PowerSaveMode() )
+        {
+        User::LeaveIfError(
+                aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngKeypadVolume,
+                aProfileId ), iProfileToneSettings.iKeypadVolume ) );
+        User::LeaveIfError(
+                aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngVibra,
+                aProfileId ), iProfileToneSettings.iVibratingAlert ) );        
+        
+   User::LeaveIfError(
+             aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngEmailVibra,
+             aProfileId ), iProfileToneSettings.iEmailVibratingAlert ) );   
+     }
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngWarnAndGameTones,
+            aProfileId ), iProfileToneSettings.iWarningAndGameTones ) );
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngMediaVolume,
+            aProfileId ), iProfileToneSettings.iMediaVolume ) );
+    User::LeaveIfError(
+            aCenRep.Set( ProfileEngUtils::ResolveKey( KProEngTextToSpeechTone,
+            aProfileId ), iProfileToneSettings.iTextToSpeech ) );
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::SetRingingTone2L
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::SetRingingTone2L(
+    const TDesC& aRingingTone )
+    {
+    HBufC* tmp = aRingingTone.Left( KMaxFileName ).AllocL();
+    delete iRingingTone2;
+    iRingingTone2 = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::SetRingingTone1L
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::SetRingingTone1L(
+    const TDesC& aRingingTone )
+    {
+    HBufC* tmp = aRingingTone.Left( KMaxFileName ).AllocL();
+    delete iRingingTone1;
+    iRingingTone1 = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::MessageAlertTone
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProfileTonesImpl::MessageAlertTone() const
+    {
+    return *iMessageAlertTone;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::RingingTone1
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProfileTonesImpl::RingingTone1() const
+    {
+    return *iRingingTone1;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::RingingTone2
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProfileTonesImpl::RingingTone2() const
+    {
+    return *iRingingTone2;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::SetMessageAlertToneL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::SetMessageAlertToneL(
+    const TDesC& aMessageAlertTone )
+    {
+    HBufC* tmp = aMessageAlertTone.Left( KMaxFileName ).AllocL();
+    delete iMessageAlertTone;
+    iMessageAlertTone = tmp;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::ToneSettings
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+const TProfileToneSettings& CProfileTonesImpl::ToneSettings() const
+    {
+    return iProfileToneSettings;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::SetToneSettings
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TProfileToneSettings& CProfileTonesImpl::SetToneSettings()
+    {
+    return iProfileToneSettings;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::InitPowerSaveMode
+//
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::InitPowerSaveMode()
+    {
+    const TInt KVibraOff = 0;
+    const TInt KMinVolume = 0;
+
+    iPsmConfigVibra = KVibraOff;
+    iPsmConfigKeypadVolume = KMinVolume;
+
+    iPowerSaveMode = ProfileEngUtils::PowerSaveMode();
+    
+    if ( iPowerSaveMode )
+        {
+        TRAP_IGNORE( ReadPowerSaveConfigL() );
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CProfileTonesImpl::ReadPowerSaveConfigL
+//
+// -----------------------------------------------------------------------------
+//
+void CProfileTonesImpl::ReadPowerSaveConfigL()
+    {
+
+    //
+    // Read psm specific vibra and keypad volume from profiles public cenrep.
+    // Psm plugin updates those when psm mode changes.
+    //
+    
+    CRepository* cenrep = CRepository::NewLC( KCRUidVibraCtrl );
+    User::LeaveIfError( cenrep->Get( KVibraCtrlProfileVibraEnabled, iPsmConfigVibra ) );
+    CleanupStack::PopAndDestroy( cenrep );
+    
+    cenrep = CRepository::NewLC( KCRUidProfileEngine );
+    User::LeaveIfError( cenrep->Get( KProEngActiveKeypadVolume, iPsmConfigKeypadVolume ) );
+    CleanupStack::PopAndDestroy( cenrep );
+    }
+    
+//  End of File