diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook/View/src/CPbkSetToneToGroup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook/View/src/CPbkSetToneToGroup.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,194 @@ +/* +* 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: +* Provides methods for Assign ringing tone to group members process. +* +*/ + + +// INCLUDE FILES +#include "CPbkSetToneToGroup.h" +#include +#include +#include +#include +#include +#include +#include + +#include + +// LOCAL CONSTANTS AND MACROS + +/// The interval to test DB compression +const TInt KCompressionInterval = 10; + + +// ================= MEMBER FUNCTIONS ======================= + +inline TBool CPbkSetToneToGroup::MoreContactsToSet() const + { + return (iContacts && iContacts->Count() > 0); + } + +inline void CPbkSetToneToGroup::Cancel() + { + delete iContacts; + iContacts = NULL; + } + +inline CPbkSetToneToGroup::CPbkSetToneToGroup + (CPbkContactEngine& aEngine) : + iEngine(aEngine) + { + PBK_DEBUG_PRINT + (PBK_DEBUG_STRING("CPbkSetToneToGroup::CPbkSetToneToGroup(0x%x)"), + this); + } + +inline void CPbkSetToneToGroup::ConstructL + (const CContactIdArray& aContacts, + const TDesC& aRingingToneName) + { + iRingingToneFile = aRingingToneName.AllocL(); + iTotalContactsToSet = aContacts.Count(); + iContacts = CContactIdArray::NewL(&aContacts); + iContacts->ReverseOrder(); + } + +EXPORT_C CPbkSetToneToGroup* CPbkSetToneToGroup::NewLC + (CPbkContactEngine& aEngine, + const CContactIdArray& aContacts, + const TDesC& aRingingToneName) + { + CPbkSetToneToGroup* self = new(ELeave) CPbkSetToneToGroup(aEngine); + CleanupStack::PushL(self); + self->ConstructL(aContacts, aRingingToneName); + return self; + } + +CPbkSetToneToGroup::~CPbkSetToneToGroup() + { + PBK_DEBUG_PRINT + (PBK_DEBUG_STRING("CPbkSetToneToGroup::~CPbkSetToneToGroup(0x%x)"), + this); + + delete iContacts; + delete iRingingToneFile; + } + +EXPORT_C const TDesC& CPbkSetToneToGroup::RingingToneFile() const + { + return *iRingingToneFile; + } + +void CPbkSetToneToGroup::StepL() + { + PBK_DEBUG_PRINT + (PBK_DEBUG_STRING("CPbkSetToneToGroup::StepL()"), + this); + + if (iSetCount % KCompressionInterval == 0) + { + iEngine.CheckFileSystemSpaceAndCompressL(); + } + + if (MoreContactsToSet()) + { + const TInt index = iContacts->Count() - 1; + const TContactItemId id = (*iContacts)[index]; + + CPbkContactItem* item = iEngine.OpenContactLCX(id); + SetRingingToneL(*item); + iEngine.CommitContactL(*item); + CleanupStack::PopAndDestroy(2); // item, lock + + iContacts->Remove(index); + ++iSetCount; + + PBK_DEBUG_PRINT(PBK_DEBUG_STRING(" set contact %d"), id); + } + } + +TInt CPbkSetToneToGroup::TotalNumberOfSteps() + { + return iTotalContactsToSet; + } + +TBool CPbkSetToneToGroup::IsProcessDone() const + { + return !MoreContactsToSet(); + } + +void CPbkSetToneToGroup::ProcessFinished() + { + PBK_DEBUG_PRINT + (PBK_DEBUG_STRING("CPbkSetToneToGroup::ProcessFinished()"), + this); + + Cancel(); + } + +TInt CPbkSetToneToGroup::HandleStepError(TInt aError) + { + PBK_DEBUG_PRINT(PBK_DEBUG_STRING("CPbkSetToneToGroup::HandleStepError(%d)"), aError); + + if (aError != KErrNone) + { + Cancel(); + } + + return aError; + } + +void CPbkSetToneToGroup::ProcessCanceled() + { + PBK_DEBUG_PRINT + (PBK_DEBUG_STRING("CPbkSetToneToGroup::ProcessCanceled()"), + this); + + Cancel(); + } + +void CPbkSetToneToGroup::SetRingingToneL + (CPbkContactItem& aItem) + { + TPbkContactItemField* field = aItem.FindField(EPbkFieldIdPersonalRingingToneIndication); + + if (iRingingToneFile->Compare(KNullDesC) == 0) + { + // remove ringing tone field + if (field) + { + aItem.RemoveField(aItem.FindFieldIndex(*field)); + } + } + else + { + // ringing tone selected + if (field) + { + field->TextStorage()->SetTextL(*iRingingToneFile); + } + else + { + // create ringing tone field + CPbkFieldInfo* fieldInfo = iEngine.FieldsInfo().Find(EPbkFieldIdPersonalRingingToneIndication); + TPbkContactItemField& newField = aItem.AddFieldL(*fieldInfo); + newField.TextStorage()->SetTextL(*iRingingToneFile); + } + } + } + +// End of File