diff -r 6b5204869ed5 -r 89c890c70182 psln/Src/PslnSoundActivator.cpp --- a/psln/Src/PslnSoundActivator.cpp Fri Jun 25 18:53:58 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 2004-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: Activates sound content, if part of the skin. -* -*/ - - -// INCLUDE FILES -#include -#include -#include -#include -#include - -// Psln specific. -#include "pslnprofilesettingsloader.h" -#include "PslnSoundActivator.h" -#include "PslnConst.h" -#include "PslnDebug.h" - - -// CONSTANTS -// Path and filename of wrapper dll. -_LIT( KPslnProfilesSettingsLoaderName, - "\\system\\libs\\PslnProfileSettingsLoader.dll"); - -// TYPE DEFINITIONS -// Profiles tone setter. -typedef TAny* (*NewProfilesSetterL)(); - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CPslnSoundActivator::CPslnSoundActivator() - { - } - -// ----------------------------------------------------------------------------- -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CPslnSoundActivator* CPslnSoundActivator::NewLC() - { - CPslnSoundActivator* self = new( ELeave ) CPslnSoundActivator; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------------------------- -void CPslnSoundActivator::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// Destructor. -// ----------------------------------------------------------------------------- -// -CPslnSoundActivator::~CPslnSoundActivator() - { - delete iProfilesSetter; - if( iProfilesDllLoaded ) - { - iProfilesDll.Close(); - } - iSoundArray.Reset(); - iSoundArray.Close(); - } - -// ----------------------------------------------------------------------------- -// CPslnSoundActivator::CollectSoundsL -// ----------------------------------------------------------------------------- -// -void CPslnSoundActivator::CollectSoundsL( const TDesC& aSkinPath, TInt& aCount ) - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::CollectSoundsL BEGIN"); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - if ( !skin ) - { - return; - } - iSoundArray.Reset(); - - TInt i = KErrNotFound; - while( KPslnSoundItems[++i] != KAknsIIDNone ) - { - CAknsStringItemData* data = - static_cast( - skin->CreateUncachedItemDataL( - KPslnSoundItems[i], - EAknsITString ) ); - if ( data ) - { - CleanupStack::PushL( data ); - - PSLN_TRACE_DEBUG("CPslnSoundActivator::CollectSoundsL skin item found"); - HBufC* fullName = HBufC::NewLC( KMaxFileName ); - TPtr fullNamePtr = fullName->Des(); - - if ( aSkinPath.Length() > 0 ) - { - FindSoundFile( fullNamePtr, data->String(), aSkinPath ); - } - else - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::CollectSoundsL empty path" ); - // @todo - start going through all the drives available. - } - - if( fullNamePtr.Length() > 0 ) - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::CollectSoundsL file found"); - TPslnSoundActivatorEntry entry; - entry.iFullName = fullNamePtr; - entry.iID = KPslnSoundItems[i]; - iSoundArray.Append( entry ); - } - - CleanupStack::PopAndDestroy( 2, data ); // data, fullName - } - } - aCount = iSoundArray.Count(); - PSLN_TRACE_DEBUG("CPslnSoundActivator::CollectSoundsL END"); - } - -// ----------------------------------------------------------------------------- -// CPslnSoundActivator::ActivateToProfilesL -// ----------------------------------------------------------------------------- -// -void CPslnSoundActivator::ActivateToProfilesL() - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::ActivateToProfilesL BEGIN"); - - // Profiles tone setter dll loading. - if( !iProfilesDllLoaded ) - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::ActivateToProfilesL about load"); - if( iProfilesDll.Load( KPslnProfilesSettingsLoaderName ) == KErrNone ) - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::ActivateToProfilesL loaded"); - iProfilesDllLoaded = ETrue; - // Request the entry function - NewProfilesSetterL profilesSetter = - (NewProfilesSetterL) iProfilesDll.Lookup( KPslnDllEntryPoint ); - if( profilesSetter ) - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::ActivateToProfilesL create"); - // Create the class - iProfilesSetter = - (CPslnProfileSettingsLoader*) (*profilesSetter)(); - } - } - } - // The wrapper failed to load. - if ( !iProfilesSetter ) - { - User::Leave( KErrNotFound ); - } - - MoveSoundFilesL(); - - // Activate all tones to all profiles. - for( TInt i = 0; i < iSoundArray.Count(); i++ ) - { - TPslnSoundActivatorEntry entry = iSoundArray[i]; - PSLN_TRACE_DEBUG1("CPslnSoundActivator::ActivateToProfilesL tone %d", i); - PSLN_TRACE_DEBUG1("CPslnSoundActivator::ActivateToProfilesL minor ID %d", entry.iID.iMinor); - PSLN_TRACE_DEBUG1("CPslnSoundActivator::ActivateToProfilesL name lenght %d ", iSoundArray[i].iFullName.Length() ); - iProfilesSetter->SetToneForProfilesL( - entry.iID.iMinor, - entry.iFullName ); - } - } - -// ----------------------------------------------------------------------------- -// CPslnSoundActivator::FindSoundFile -// ----------------------------------------------------------------------------- -// -void CPslnSoundActivator::FindSoundFile( - TDes& aFullName, const TDesC& aSoundFile, const TDesC& aSkinPath ) - { - aFullName.Copy( aSkinPath ); - aFullName.Append( aSoundFile ); - } - -// ----------------------------------------------------------------------------- -// CPslnSoundActivator::MoveSoundFilesL -// ----------------------------------------------------------------------------- -// -void CPslnSoundActivator::MoveSoundFilesL() - { - RAknsSrvSession skinsrv; - User::LeaveIfError( skinsrv.Connect() ); - CleanupClosePushL( skinsrv ); - - RFs& fs = CEikonEnv::Static()->FsSession(); - - for( TInt i = 0; i < iSoundArray.Count(); i++ ) - { - TPslnSoundActivatorEntry entry = iSoundArray[i]; - - HBufC* targetPath = NULL; - TFileName filename; - - // Sort out path to which store the sound file. - TInt driveId; - User::LeaveIfError( - RFs::CharToDrive( entry.iFullName[0], driveId ) ); - - TUint driveStatus; - User::LeaveIfError( - DriveInfo::GetDriveStatus( fs, driveId, driveStatus ) ); - - if ( driveStatus & DriveInfo::EDriveReadOnly ) - { - // If ROM, then let's store to phone memory. - User::LeaveIfError( - DriveInfo::GetDefaultDrive( - DriveInfo::EDefaultPhoneMemory, - driveId ) ); - } - - User::LeaveIfError( - PathInfo::GetRootPath( filename, driveId ) ); - filename.Append( PathInfo::SoundsPath() ); - targetPath = filename.AllocLC(); - - TParsePtrC parse( entry.iFullName ); - TFileName* targetFile = new (ELeave) TFileName; - CleanupStack::PushL( targetFile ); - targetFile->Copy( *targetPath ); - targetFile->Append( parse.NameAndExt() ); - - skinsrv.CopySoundFile( entry.iFullName, *targetFile ); - if ( iProfilesSetter ) - { - PSLN_TRACE_DEBUG("CPslnSoundActivator::MoveSoundFilesL indicate to mgx"); - PSLN_TRACE_DEBUG1("CPslnSoundActivator: Move to \"%S\" ", targetFile ); - - iProfilesSetter->IndicateFileUpdationL( *targetFile ); - } - iSoundArray[i].iFullName = *targetFile; - PSLN_TRACE_DEBUG1("CPslnSoundActivator: Move2 lenght %d ", iSoundArray[i].iFullName.Length() ); - CleanupStack::PopAndDestroy( 2, targetPath ); - } - CleanupStack::PopAndDestroy(); //skinsrv - } - -// End of File