--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesservices/ProfileEngine/WrapperSrc/CProEngTonesImpl.cpp Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,353 @@
+/*
+* Copyright (c) 2002-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 CProEngTonesImpl.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CProEngTonesImpl.h"
+#include <MProfileTones.h>
+#include <MProfileExtraTones.h>
+#include "MProfileSetTones.h"
+#include "MProfileSetExtraTones.h"
+#include "MProfileExtended.h"
+#include "CProEngToneHandler.h"
+#include "ProfileEng.hrh" // TProfileSettingId
+#include <pathinfo.h>
+#include <ProfileEngineDomainConstants.h>
+
+namespace
+ {
+ // CONSTANTS
+ // This flag is only used internally by this class (actually 0x0002 is
+ // defined in MProfileExtended.h as EProfileFlagRingingType) for indicating
+ // whether ringing tone 2 has been modified or not:
+ const TInt KProEngFlagRingingTone2 = 0x0002;
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::CProEngTonesImpl
+// -----------------------------------------------------------------------------
+//
+CProEngTonesImpl::CProEngTonesImpl(
+ const MProfileTones& aProfileTones,
+ MProfileSetTones& aProfileSetTones,
+ const MProfileExtraTones& aProfileExtraTones,
+ MProfileSetExtraTones& aProfileSetExtraTones,
+ TUint32 aModifiableFlags )
+ : iProfileTones( aProfileTones ), iProfileSetTones( aProfileSetTones ),
+ iProfileExtraTones( aProfileExtraTones ),
+ iProfileSetExtraTones( aProfileSetExtraTones ),
+ iModifiableFlags( aModifiableFlags ),
+ iNullTone( KNullDesC )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CProEngTonesImpl::ConstructL()
+ {
+ // Read the file to be used when KNullDesC is set as an alert tone:
+ RBuf toneBuf;
+ toneBuf.CreateL( KMaxFileName );
+ CleanupClosePushL( toneBuf );
+ toneBuf.Copy( TParsePtrC( PathInfo::RomRootPath() ).Drive() );
+ toneBuf.Append( KProfileNoSoundPath );
+
+ iEmptyTone = toneBuf.AllocL();
+ CleanupStack::PopAndDestroy(); // toneBuf
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CProEngTonesImpl* CProEngTonesImpl::NewL(
+ const MProfileTones& aProfileTones,
+ MProfileSetTones& aProfileSetTones,
+ const MProfileExtraTones& aProfileExtraTones,
+ MProfileSetExtraTones& aProfileSetExtraTones,
+ TUint32 aModifiableFlags )
+ {
+ CProEngTonesImpl* self = new ( ELeave ) CProEngTonesImpl(
+ aProfileTones, aProfileSetTones, aProfileExtraTones,
+ aProfileSetExtraTones, aModifiableFlags );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// Destructor
+CProEngTonesImpl::~CProEngTonesImpl()
+ {
+ delete iEmptyTone;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::RingingTone1
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProEngTonesImpl::RingingTone1() const
+ {
+ return iProfileTones.RingingTone1();
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::RingingTone2
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProEngTonesImpl::RingingTone2() const
+ {
+ return iProfileTones.RingingTone2();
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::MessageAlertTone
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProEngTonesImpl::MessageAlertTone() const
+ {
+ return iProfileTones.MessageAlertTone();
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::EmailAlertTone
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProEngTonesImpl::EmailAlertTone() const
+ {
+ return iProfileExtraTones.EmailAlertTone();
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::VideoCallRingingTone
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProEngTonesImpl::VideoCallRingingTone() const
+ {
+ return iProfileExtraTones.VideoCallRingingTone();
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::SetRingingTone1L
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::SetRingingTone1L( const TDesC& aRingingTone )
+ {
+ if( iModifiableFlags & EProfileFlagRingingTone )
+ {
+ TPtrC tonePtr( ConvertKNullToEmptyTone( aRingingTone ) );
+ iProfileSetTones.SetRingingTone1L( tonePtr );
+ iModifiedFlags |= EProfileFlagRingingTone;
+ return KErrNone;
+ }
+ return KErrAccessDenied;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::SetRingingTone2L
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::SetRingingTone2L( const TDesC& aRingingTone )
+ {
+ if( iModifiableFlags & EProfileFlagRingingTone )
+ {
+ TPtrC tonePtr( ConvertKNullToEmptyTone( aRingingTone ) );
+ iProfileSetTones.SetRingingTone2L( tonePtr );
+ iModifiedFlags |= KProEngFlagRingingTone2;
+ return KErrNone;
+ }
+ return KErrAccessDenied;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::SetMessageAlertToneL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::SetMessageAlertToneL( const TDesC& aMessageAlertTone )
+ {
+ if( iModifiableFlags & EProfileFlagMessageAlertTone )
+ {
+ TPtrC tonePtr( ConvertKNullToEmptyTone( aMessageAlertTone ) );
+ iProfileSetTones.SetMessageAlertToneL( tonePtr );
+ iModifiedFlags |= EProfileFlagMessageAlertTone;
+ return KErrNone;
+ }
+ return KErrAccessDenied;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::SetEmailAlertToneL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::SetEmailAlertToneL( const TDesC& aEmailAlertTone )
+ {
+ if( iModifiableFlags & EProfileFlagEmailAlertTone )
+ {
+ TPtrC tonePtr( ConvertKNullToEmptyTone( aEmailAlertTone ) );
+ iProfileSetExtraTones.SetEmailAlertToneL( tonePtr );
+ iModifiedFlags |= EProfileFlagEmailAlertTone;
+ return KErrNone;
+ }
+ return KErrAccessDenied;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::SetVideoCallRingingToneL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::SetVideoCallRingingToneL( const TDesC& aRingingTone )
+ {
+ if( iModifiableFlags & EProfileFlagVideoCallRingingTone )
+ {
+ TPtrC tonePtr( ConvertKNullToEmptyTone( aRingingTone ) );
+ iProfileSetExtraTones.SetVideoCallRingingToneL( tonePtr );
+ iModifiedFlags |= EProfileFlagVideoCallRingingTone;
+ return KErrNone;
+ }
+ return KErrAccessDenied;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::CheckTonesL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::CheckTonesL( CProEngToneHandler& aToneHandler )
+ {
+ TInt result( KErrNone );
+ if( iModifiedFlags & EProfileFlagRingingTone )
+ {
+ result = aToneHandler.CheckToneFileL( iProfileTones.RingingTone1(),
+ EProfileSettingIdRingingTone );
+ if( result != KErrNone )
+ {
+ return result;
+ }
+ }
+ if( iModifiedFlags & KProEngFlagRingingTone2 )
+ {
+ result = aToneHandler.CheckToneFileL( iProfileTones.RingingTone2(),
+ EProfileSettingIdRingingTone2 );
+ if( result != KErrNone )
+ {
+ return result;
+ }
+ }
+ if( iModifiedFlags & EProfileFlagMessageAlertTone )
+ {
+ result = aToneHandler.CheckToneFileL(
+ iProfileTones.MessageAlertTone(),
+ EProfileSettingIdMsgTone );
+ if( result != KErrNone )
+ {
+ return result;
+ }
+ }
+ if( iModifiedFlags & EProfileFlagEmailAlertTone )
+ {
+ result = aToneHandler.CheckToneFileL(
+ iProfileExtraTones.EmailAlertTone(),
+ EProfileSettingIdEmailTone );
+ if( result != KErrNone )
+ {
+ return result;
+ }
+ }
+ if( iModifiedFlags & EProfileFlagVideoCallRingingTone )
+ {
+ result = aToneHandler.CheckToneFileL(
+ iProfileExtraTones.VideoCallRingingTone(),
+ EProfileSettingIdVideoCallTone );
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::HandleAutomatedContentL
+// -----------------------------------------------------------------------------
+//
+TInt CProEngTonesImpl::HandleAutomatedContent(
+ CProEngToneHandler& aToneHandler, const CProEngTonesImpl& aOldTones )
+ {
+ TInt err( KErrNone );
+ if( iModifiedFlags & EProfileFlagRingingTone )
+ {
+ err = aToneHandler.HandleAutomatedContent(
+ EProfileSettingIdRingingTone,
+ iProfileTones.RingingTone1(),
+ aOldTones.iProfileTones.RingingTone1() );
+ iModifiedFlags &= ~EProfileFlagRingingTone;
+ }
+ if( !err && ( iModifiedFlags & KProEngFlagRingingTone2 ) )
+ {
+ err = aToneHandler.HandleAutomatedContent(
+ EProfileSettingIdRingingTone2,
+ iProfileTones.RingingTone2(),
+ aOldTones.iProfileTones.RingingTone2() );
+ iModifiedFlags &= ~KProEngFlagRingingTone2;
+ }
+ if( !err && ( iModifiedFlags & EProfileFlagMessageAlertTone ) )
+ {
+ err = aToneHandler.HandleAutomatedContent(
+ EProfileSettingIdMsgTone,
+ iProfileTones.MessageAlertTone(),
+ aOldTones.iProfileTones.MessageAlertTone() );
+ iModifiedFlags &= ~EProfileFlagMessageAlertTone;
+ }
+ if( !err && ( iModifiedFlags & EProfileFlagEmailAlertTone ) )
+ {
+ err = aToneHandler.HandleAutomatedContent(
+ EProfileSettingIdEmailTone,
+ iProfileExtraTones.EmailAlertTone(),
+ aOldTones.iProfileExtraTones.EmailAlertTone() );
+ iModifiedFlags &= ~EProfileFlagEmailAlertTone;
+ }
+ if( !err && ( iModifiedFlags & EProfileFlagVideoCallRingingTone ) )
+ {
+ err = aToneHandler.HandleAutomatedContent(
+ EProfileSettingIdVideoCallTone,
+ iProfileExtraTones.VideoCallRingingTone(),
+ aOldTones.iProfileExtraTones.VideoCallRingingTone() );
+ iModifiedFlags &= ~EProfileFlagVideoCallRingingTone;
+ }
+ return err;
+ }
+
+// -----------------------------------------------------------------------------
+// CProEngTonesImpl::ConvertKNullToEmptyTone
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProEngTonesImpl::ConvertKNullToEmptyTone(
+ const TDesC& aTone ) const
+ {
+ if( aTone.Length() == 0 )
+ {
+ return *iEmptyTone;
+ }
+ return aTone;
+ }
+
+// End of File
+
+