phonebookui/Phonebook/View/src/CPbkRingingToneFetch.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /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    <cntfldst.h>
+#include    <coemain.h>
+#include    <CFLDFileListContainer.h>
+#include    <PbkView.rsg>
+#include    <CPbkContactEngine.h>
+#include    <CPbkFieldsInfo.h>
+#include    <CPbkFieldInfo.h>
+#include    <CPbkContactItem.h>
+#include    <TPbkContactItemField.h>
+#include    <CPbkConstants.h>
+#include    <featmgr.h>
+#include    <DRMHelper.h>
+#include    <centralrepository.h>
+#include    <ProfileEngineDomainCRKeys.h>
+
+
+// ================= 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