diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook/View/src/CPbkRingingToneFetch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook/View/src/CPbkRingingToneFetch.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,160 @@ +/* +* 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: +* Provides methods for fetching ringing tones into phonebook. +* +*/ + + +// INCLUDE FILES +#include "CPbkRingingToneFetch.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// ================= MEMBER FUNCTIONS ======================= +inline CPbkRingingToneFetch::CPbkRingingToneFetch + (CPbkContactEngine& aEngine) : + iEngine(aEngine) + { + } + +inline void CPbkRingingToneFetch::ConstructL() + { + FeatureManager::InitializeLibL(); + CCoeEnv* coeEnv = CCoeEnv::Static(); + iTitle = coeEnv->AllocReadResourceL(R_QTN_TC_POPUP_HEADING); + iNoSound = coeEnv->AllocReadResourceL(R_QTN_PHOP_SELI_DEFAULT_RTONE); + } + +EXPORT_C CPbkRingingToneFetch* CPbkRingingToneFetch::NewL(CPbkContactEngine& aEngine) + { + CPbkRingingToneFetch* self = new(ELeave) CPbkRingingToneFetch(aEngine); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); // self + return self; + } + +CPbkRingingToneFetch::~CPbkRingingToneFetch() + { + // delete data members + delete iNoSound; + delete iTitle; + FeatureManager::UnInitializeLib(); + } + +EXPORT_C TBool CPbkRingingToneFetch::FetchRingingToneL + (TFileName& aRingingToneFile) + { + CFLDFileListContainer* fileListDlg = CFLDFileListContainer::NewLC(); + fileListDlg->InsertNullItemL(*iNoSound); + SetMaxToneFileSizeL( fileListDlg ); + fileListDlg->SetAutomatedType(CDRMHelper::EAutomatedTypeRingingTone); + TBool result = fileListDlg->LaunchL(aRingingToneFile, *iTitle); + CleanupStack::PopAndDestroy(fileListDlg); + + return result; + } + +EXPORT_C void CPbkRingingToneFetch::SetRingingToneL + (CPbkContactItem& aItem, + TFileName& aRingingToneFile) + { + TPbkContactItemField* field = aItem.FindField(EPbkFieldIdPersonalRingingToneIndication); + + if (aRingingToneFile.Compare(KNullDesC) == 0) + { + // remove ringing tone field + if (field) + { + const TDesC& oldRingingToneFile = field->Text(); + HandleRingingToneRemovalL(oldRingingToneFile); + aItem.RemoveField(aItem.FindFieldIndex(*field)); + } + } + else + { + // ringing tone selected + if (field) + { + // there was an old ringing tone stored => handle removal + const TDesC& oldRingingToneFile = field->Text(); + HandleRingingToneRemovalL(oldRingingToneFile); + field->TextStorage()->SetTextL(aRingingToneFile); + } + else + { + // create ringing tone field + CPbkFieldInfo* fieldInfo = iEngine.FieldsInfo().Find(EPbkFieldIdPersonalRingingToneIndication); + TPbkContactItemField& newField = aItem.AddFieldL(*fieldInfo); + newField.TextStorage()->SetTextL(aRingingToneFile); + } + } + } + +void CPbkRingingToneFetch::HandleRingingToneRemovalL + (const TDesC& aOldTone) + { + if (!FeatureManager::FeatureSupported(KFeatureIdDrmFull)) + { + return; + } + + if (aOldTone.Compare(KNullDesC) != 0) + { + CDRMHelper* drmHelper = CDRMHelper::NewL(); + drmHelper->RemoveAutomatedPassive(aOldTone); + delete drmHelper; + } + } + +// ----------------------------------------------------------------------------- +// CPbkRingingToneFetch::SetMaxToneFileSizeL +// ----------------------------------------------------------------------------- +// +void CPbkRingingToneFetch::SetMaxToneFileSizeL( CFLDFileListContainer* aFl ) + { + // Set file size limit if configured ON. + TInt sizeLimitB( 0 ); + CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine ); + CleanupStack::PushL( cenrep ); + + User::LeaveIfError( cenrep->Get( KProEngRingingToneMaxSize, + sizeLimitB ) ); + CleanupStack::PopAndDestroy(); // cenrep + if ( sizeLimitB < 0 ) + { + sizeLimitB = 0; + } + sizeLimitB *= 1024; + if ( sizeLimitB ) + { + aFl->SetMaxFileSize( sizeLimitB ); + } + } + +// End of File