phonebookui/Phonebook2/CommonUI/src/CPbk2RingingToneFetch.cpp
changeset 0 e686773b3f54
child 3 04ab22b956c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2RingingToneFetch.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,131 @@
+/*
+* Copyright (c) 2005-2007 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 <CPbk2RingingToneFetch.h>
+
+// Phonebook 2
+#include <Pbk2CommonUi.rsg>
+
+// System includes
+#include <cntfldst.h>
+#include <coemain.h>
+#include <mediafilelist.h>
+#include <centralrepository.h>
+#include <ProfileEngineDomainCRKeys.h>
+#include <DRMHelper.h>
+
+// ================= MEMBER FUNCTIONS =======================
+inline CPbk2RingingToneFetch::CPbk2RingingToneFetch()
+    {
+    }
+
+CPbk2RingingToneFetch::~CPbk2RingingToneFetch()
+    {
+    delete iNoSound;
+    delete iTitle;
+    }
+
+EXPORT_C CPbk2RingingToneFetch* CPbk2RingingToneFetch::NewL()
+    {
+    CPbk2RingingToneFetch* self = new ( ELeave ) CPbk2RingingToneFetch();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+inline void CPbk2RingingToneFetch::ConstructL()
+    {
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    iTitle = coeEnv->AllocReadResourceL( R_QTN_TC_POPUP_HEADING );
+    iNoSound = coeEnv->AllocReadResourceL( R_QTN_PHOP_SELI_DEFAULT_RTONE );
+    }
+
+EXPORT_C TBool CPbk2RingingToneFetch::FetchRingingToneL
+        ( TFileName& aRingingToneFile )
+    {
+    // Fetch the DefaultToneFile from Profile
+    TFileName   ringingToneFile;
+
+    CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine );
+    CleanupStack::PushL( cenrep );
+
+    User::LeaveIfError( cenrep->Get( KProEngDefaultRingingTone,
+    		                            ringingToneFile ) );
+    CleanupStack::PopAndDestroy(); // cenrep
+    
+    CMediaFileList* list = CMediaFileList::NewL();
+    CleanupStack::PushL( list );
+    
+    list->SetNullItemL( *iNoSound, ringingToneFile,  
+            CMediaFileList::EMediaFileTypeAudio,
+            CMediaFileList::ENullItemIconDefaultTone );
+    list->SetAttrL( CMediaFileList::EAttrTitle, *iTitle );
+    SetMaxToneFileSizeL( list );
+    TInt nullItem = KErrNotFound;
+    list->SetAttrL( CMediaFileList::EAttrAutomatedType,
+            CDRMHelper::EAutomatedTypeRingingTone );
+    TBool result = list->ShowMediaFileListL( &aRingingToneFile,
+            &nullItem, NULL, NULL );
+    CleanupStack::PopAndDestroy( list );
+        
+    // Set result to be ETrue if nullItem (like default tone) 
+    // is selected in media file list.
+    if ( KErrNotFound != nullItem )
+        {
+        //if DefaultTone is selected, then empty aRingingToneFile
+        if( !ringingToneFile.Compare(aRingingToneFile) )
+        	{
+        	aRingingToneFile.Zero();
+        	}
+        result = ETrue;
+        }
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2RingingToneFetch::SetMaxToneFileSizeL
+// Limit the size of ringing tone files shown on the file list
+// according to cenrep key.
+//
+// @param aFL The ringing tone file list to limit
+// --------------------------------------------------------------------------
+//
+void CPbk2RingingToneFetch::SetMaxToneFileSizeL( CMediaFileList* 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 *= KKilo;
+    if ( sizeLimitB )
+        {
+       aFl->SetAttrL( CMediaFileList::EAttrFileSize, sizeLimitB );
+        }
+    }
+
+//  End of File