profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginFileListSettingItem.cpp
branchRCL_3
changeset 23 cd54903d48da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginFileListSettingItem.cpp	Wed Sep 01 12:30:29 2010 +0100
@@ -0,0 +1,370 @@
+/*
+* 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:  Setting item class for tone selection.
+*
+*/
+
+
+
+// CLASS HEADER
+#include "CProfilesGSTonesPluginFileListSettingItem.h"
+
+// INTERNAL INCLUDES
+#include <Profile.hrh> // From Profile Engine
+#include <ProfileSettingsView.hrh>
+#include "ProfilesGSTonesPlugin.hrh"
+#include <profilesgstonespluginrsc.rsg>
+#include "MProfilesGSTonesPluginItemDataInterface.h"
+#include "ProfilesDebug.h"
+
+// SYSTEM INCLUDES
+#include <centralrepository.h>
+#include <coemain.h>
+#include <CFLDFileListContainer.h>
+#include <stringloader.h>
+#include <data_caging_path_literals.hrh>
+#include <ProfileEngineInternalCRKeys.h>
+#include <HWRMVibraSDKCRKeys.h>
+#include <CLFContentListing.hrh>
+
+namespace
+	{
+// CONSTANTS
+	_LIT( KIgnoredExtension, ".RNG" );
+	_LIT( KProfileSilentTone, "Z:No_Sound.wav" );
+    // MIME types that should not be shown by FileList
+    _LIT( KProfileTypeMpegUrl, "audio/mpegurl" );
+    _LIT( KProfileTypeRaPlugin, "audio/x-pn-realaudio-plugin" );
+#ifndef __WMA
+    _LIT( KProfileTypeWma, "audio/x-ms-wma" );
+#endif
+	}
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::CProfilesGSTonesPluginFileListSettingItem
+// C++ constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CProfilesGSTonesPluginFileListSettingItem::CProfilesGSTonesPluginFileListSettingItem(
+    TInt aIdentifier,
+    const TDesC& aDefaultToneFileName,
+    CCoeEnv* aCoeEnv,
+    MProfilesGSTonesPluginItemDataInterface& aDataInterface )
+    :   CAknSettingItem( aIdentifier ),
+        iDefaultToneFileName( aDefaultToneFileName ),
+        iCoeEnv( aCoeEnv ),
+        iDataInterface( aDataInterface )
+    {
+    }
+
+// Destructor
+CProfilesGSTonesPluginFileListSettingItem::~CProfilesGSTonesPluginFileListSettingItem()
+    {
+    PRODEBUG( "~CProfilesGSTonesPluginFileListSettingItem" );
+	if( iVibraNotifyHandler )
+		{
+		iVibraNotifyHandler->StopListening();
+		}
+
+	if( iTypeNotifyHandler )
+		{
+		iTypeNotifyHandler->StopListening();
+		}
+
+	if( iVolumeNotifyHandler )
+		{
+		iVolumeNotifyHandler->StopListening();
+		}
+
+    delete iVibraNotifyHandler;
+	delete iTypeNotifyHandler;
+    delete iVolumeNotifyHandler;
+
+    delete iSession;
+    delete iVibraSession;
+
+    delete iTitle;
+    delete iNoSoundFileName;
+    delete iNoSoundText;
+
+    delete iDefaultToneText;
+    delete iFileListContainer;
+    PRODEBUG( "~CProfilesGSTonesPluginFileListSettingItem end" );
+    }
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::CompleteConstructionL
+// -----------------------------------------------------------------------------
+//
+void CProfilesGSTonesPluginFileListSettingItem::CompleteConstructionL()
+    {
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::CompleteConstr begin" );
+    iNoSoundText =
+		StringLoader::LoadL( R_PROFILE_TEXT_NONE );
+
+	TFileName fileName;
+	TParse* fp = new(ELeave) TParse();
+	fp->Set(KProfileSilentTone, &KDC_RESOURCE_FILES_DIR, NULL);
+	fileName.Copy( fp->FullName() );
+	delete fp;
+	iNoSoundFileName = fileName.AllocL();
+    iTitle =
+        StringLoader::LoadL( R_PROFILE_TEXT_SELECT_TONE );
+
+    iVibraSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession = CRepository::NewL(KCRUidProfileEngine);
+    ReadMaxToneFileSizeL( *iSession );
+
+	iVibraNotifyHandler = CCenRepNotifyHandler::NewL(*this,
+            *iVibraSession,
+            CCenRepNotifyHandler::EIntKey,
+            KVibraCtrlProfileVibraEnabled);
+
+    User::LeaveIfError( iVibraSession->Get( KVibraCtrlProfileVibraEnabled, iVibratingAlert ) );
+
+    iVibraNotifyHandler->StartListeningL();
+
+    if( Identifier() == EProfileGSTonesPluginSettingCalendarToneId )
+        {
+        iVolumeNotifyHandler = CCenRepNotifyHandler::NewL(*this,
+                *iSession,
+                CCenRepNotifyHandler::EIntKey,
+                KProEngActiveRingingVolume);
+
+        iTypeNotifyHandler = CCenRepNotifyHandler::NewL(*this,
+                *iSession,
+                CCenRepNotifyHandler::EIntKey,
+                KProEngActiveRingingType);
+
+        User::LeaveIfError( iSession->Get( KProEngActiveRingingVolume,
+                                           iRingingVolume ) );
+        User::LeaveIfError( iSession->Get( KProEngActiveRingingType,
+                                           iRingingType ) );
+
+        iVolumeNotifyHandler->StartListeningL();
+        iTypeNotifyHandler->StartListeningL();
+        }
+
+    iDefaultToneText = StringLoader::LoadL(R_QTN_NO_PERSONAL_TONE, iCoeEnv);
+    iInternalToneFileName.Copy( iDataInterface.ItemData() );
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::CompleteConstr end" );
+    }
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::StoreL
+// -----------------------------------------------------------------------------
+//
+void CProfilesGSTonesPluginFileListSettingItem::StoreL()
+    {
+    if( iInternalToneFileName.Length() == 0 )
+        {
+        iInternalToneFileName = *iNoSoundFileName; // No_Sound.wav
+        }
+    iDataInterface.SetItemDataL( iInternalToneFileName );
+    }
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::LoadL
+// -----------------------------------------------------------------------------
+//
+void CProfilesGSTonesPluginFileListSettingItem::LoadL()
+    {
+    iInternalToneFileName.Copy( iDataInterface.ItemData() );
+    if( iInternalToneFileName.Length() == 0 )
+        {
+        iInternalToneFileName = *iNoSoundFileName;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::EditItemL
+// -----------------------------------------------------------------------------
+//
+void CProfilesGSTonesPluginFileListSettingItem::EditItemL( TBool /* aCalledFromMenu */ )
+    {
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL begin" );
+    TInt ringingType( iRingingType );
+    TInt volume( iRingingVolume );
+    TInt id( Identifier() );
+    if( id == EProfileGSTonesPluginSettingCalendarToneId )
+        {
+        if( ( ringingType != EProfileRingingTypeBeepOnce ) &&
+            ( ringingType != EProfileRingingTypeSilent ) )
+            {
+            ringingType = EProfileRingingTypeRinging;
+            }
+        }
+    else // Clock alert tone
+        {
+        ringingType = EProfileRingingTypeRinging;
+        volume = EProfileRingingVolumeLevel7;
+        }
+
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL before FLD constr" );
+
+    iFileListContainer = CFLDFileListContainer::NewL();
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL after FLD constr" );
+
+
+    iFileListContainer->InsertNullItemL( *iDefaultToneText, iDefaultToneFileName );
+    // Add "Off" as the last item in tone selection list.
+    iFileListContainer->InsertEndNullItemL( *iNoSoundText, *iNoSoundFileName );
+    iFileListContainer->SetRingingType( ringingType );
+    iFileListContainer->SetVolume( volume );
+    iFileListContainer->SetVibra( iVibratingAlert );
+    iFileListContainer->AddExclusiveMimeTypeL( KProfileTypeMpegUrl );
+    iFileListContainer->AddExclusiveMimeTypeL( KProfileTypeRaPlugin );
+#ifndef __WMA
+    iFileListContainer->AddExclusiveMimeTypeL( KProfileTypeWma );
+#endif
+    iFileListContainer->AddExclusiveMediaTypeL( ECLFMediaTypeVideo );
+
+    if( id == EProfileGSTonesPluginSettingCalendarToneId )
+        {
+        iFileListContainer->SetAutomatedType(
+                CDRMHelper::EAutomatedTypeCalendarAlarm );
+        }
+    else
+        {
+        iFileListContainer->SetAutomatedType(
+                CDRMHelper::EAutomatedTypeClockAlarm );
+        }
+
+    // Size limit for voice call tone files
+    if ( ( id == EProfileSettingRingingToneId      ||
+           id == EProfileSettingRingingToneLine1Id ||
+           id == EProfileSettingRingingToneLine2Id ) && iSizeLimit )
+        {
+        iFileListContainer->SetMaxFileSize( iSizeLimit );
+        }
+		
+    // Launch File List Dialog
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL before FLD launch" );
+    TBool returnValue( iFileListContainer->LaunchL( iInternalToneFileName, *iTitle ) );
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL after FLD launch" );
+    if( returnValue )
+        {
+        // Setting Oked.
+        iDataInterface.SetItemDataL( iInternalToneFileName ); 
+        UpdateListBoxTextL();
+        }
+
+    delete iFileListContainer;
+    iFileListContainer = NULL;
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL end" );
+    }
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::SettingTextL
+// -----------------------------------------------------------------------------
+//
+const TDesC& CProfilesGSTonesPluginFileListSettingItem::SettingTextL()
+    {
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::SettingTextL begin" );
+    if( iInternalToneFileName.Length() > 0 )
+        {
+        // FLD has returned a filename
+        if( iInternalToneFileName.CompareF( *iNoSoundFileName ) == 0 )
+            {
+            // Filename is "No_Sound", return localized text "None"
+            iSettingText.Set( *iNoSoundText );
+            }
+        else if( iInternalToneFileName.CompareF( iDefaultToneFileName ) == 0 )
+            {
+            // Filename is "No_Sound", return localized text "None"
+            iSettingText.Set( *iDefaultToneText );
+            }
+        else
+            {
+            // Filename is something else
+            TParsePtrC parse( iInternalToneFileName );
+            if( parse.Ext().CompareF( KIgnoredExtension ) == 0 )
+                {
+                iSettingText.Set( parse.Name() );
+                }
+            else
+                {
+                iSettingText.Set( parse.NameAndExt() );
+                }
+            }
+        }
+    else
+        {
+        // Filename is an empty descriptor, return localised text "None"
+        iSettingText.Set( *iNoSoundText );
+        }
+    PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::SettingTextL end" );
+    return iSettingText;
+    }
+
+// -----------------------------------------------------------------------------
+// CProfilesGSTonesPluginFileListSettingItem::HandleNotifyInt
+// -----------------------------------------------------------------------------
+//
+void CProfilesGSTonesPluginFileListSettingItem::HandleNotifyInt( TUint32 aId,
+        TInt aNewValue )
+    {
+    switch( aId )
+        {
+        case KVibraCtrlProfileVibraEnabled:
+            {
+            iVibratingAlert = aNewValue;
+            if( iFileListContainer )
+                {
+                iFileListContainer->SetVibra( iVibratingAlert );
+                }
+            break;
+            }
+        case KProEngActiveRingingType:
+            {
+            iRingingType = aNewValue;
+            if( iFileListContainer )
+                {
+                iFileListContainer->SetRingingType( iRingingType );
+                }
+            break;
+            }
+        default: // KProEngActiveRingingVolume 
+            {
+            iRingingVolume = aNewValue;
+            if( iFileListContainer )
+                {
+                iFileListContainer->SetVolume( iRingingVolume );
+                }
+            break;
+            }
+        }
+
+    }
+
+// -----------------------------------------------------------------------------
+// CProfileFileListSettingItem::ReadMaxToneFileSizeL
+// -----------------------------------------------------------------------------
+//
+void CProfilesGSTonesPluginFileListSettingItem::ReadMaxToneFileSizeL(
+        CRepository& aRepository )
+    {
+    // Set file size limit if configured ON.
+	User::LeaveIfError( aRepository.Get( KProEngRingingToneMaxSize,
+                                         iSizeLimit ) );
+	if ( iSizeLimit < 0 )
+	    {
+	    iSizeLimit = 0;
+	    }
+	iSizeLimit *= KKilo;
+    }
+
+// End Of File