diff -r 924385140d98 -r c2c61fdca848 startupservices/Startup/src/StartupTone.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/startupservices/Startup/src/StartupTone.cpp Wed Sep 01 12:24:48 2010 +0100 @@ -0,0 +1,324 @@ +/* +* Copyright (c) 2005-2010 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: +* This class is the container class of the CStartupTone. +* Is used to play startup tone. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include "StartupTone.h" +#include "StartupAppUi.h" +#include "AudioPreference.h" + +#define MIN_VOLUME 0 +#define MAX_VOLUME 10000 + +//=============================== MEMBER FUNCTIONS ============================ +// --------------------------------------------------------- +// Constructor & destructor +// EPOC two phased constructor +// --------------------------------------------------------- +// +CStartupTone::CStartupTone( CStartupAppUi* aStartupAppUi ) : + iTone( NULL ), + iAudioReady( EFalse ), + iPlaying( EFalse ), + iStartupAppUi( aStartupAppUi ), + iHiddenReset (EFalse ), + iStartupWaitingForTone ( EFalse ) + { + } + +CStartupTone::~CStartupTone() + { + TRACES("CStartupTone::~CStartupTone()"); + + if (iTone) + { + if (iPlaying) + { + TRACES("CStartupTone::~CStartupTone(): Still playing. Stop it!"); + iTone->Stop(); + } + delete iTone; + iTone = NULL; + TRACES("CStartupTone::~CStartupTone(): iTone deleted"); + } + TRACES("CStartupTone::~CStartupTone(): End"); + } + +// ---------------------------------------------------- +// CStartupTone::NewL( CStartupAppUi* aStartupAppUi ) +// ---------------------------------------------------- +CStartupTone* CStartupTone::NewL( CStartupAppUi* aStartupAppUi, TToneType aToneType ) + { + TRACES("CStartupTone::NewL()"); + CStartupTone* self = new (ELeave) CStartupTone( aStartupAppUi ); + + CleanupStack::PushL( self ); + self->ConstructL(aToneType); + CleanupStack::Pop(); // self + + TRACES("CStartupTone::NewL(): End"); + return self; + } + +void CStartupTone::ConstructL(TToneType aToneType) + { + TRACES("CStartupTone::ConstructL()"); + // Check tone volume + iVolume = GetRingingToneVolumeL(); + // Check if hidden reset + iHiddenReset = iStartupAppUi->HiddenReset(); + + iToneType = aToneType; + + if ((!iHiddenReset) && (iVolume)) + { + TPath tonePath; + TRACES("CStartupTone::ConstructL(): Get tone path from CenRep"); + + CRepository* repository(NULL); + + TRAPD( err, repository = CRepository::NewL( KCRUidStartupConf ) ); + if ( err != KErrNone ) + { + TRACES("CStartupTone::ConstructL(): End, ERROR: Failed to get startup tone path"); + return; + } + if (iToneType == EStartupTone) + { + TRACES("CStartupTone::ConstructL(): Tone type EStartupTone"); + err = repository->Get( KStartupTonePath, tonePath ); + } + else + { + TRACES("CStartupTone::ConstructL(): Tone type EStartupOpTone"); + err = repository->Get( KStartupOperatorTonePath, tonePath ); + } + delete repository; + + TRACES2("CStartupTone::ConstructL(): Get tone to play. err = %d, Path = '%S'", err, &tonePath ); + + RFs fs; + err = fs.Connect(); + TFindFile findExe(fs); + err = findExe.FindByPath( tonePath, NULL ); + fs.Close(); + if (err != KErrNone) + { + TRACES1("CStartupTone::ConstructL(): Tone to play: Cannot find tone. err = %d", err); + } + else + { + TRACES("CStartupTone::ConstructL(): Tone found"); + iTone = CMdaAudioPlayerUtility::NewFilePlayerL( + tonePath, + *this, KAudioPriorityPhonePower, + TMdaPriorityPreference( KAudioPrefDefaultTone)); + } + } + } +// --------------------------------------------------------- +// void CStartupTone::Play() +// --------------------------------------------------------- +// + +TInt CStartupTone::Play() + { + TRACES("CStartupTone::Play()"); + TRACES1("CStartupTone::Play(): Tone type: %d", iToneType); + if (iAudioReady && !iHiddenReset && iVolume && iTone) + { + TRACES("CStartupTone::Play(): Audio ready. Play tone"); + iVolume = Max( MIN_VOLUME, Min( iVolume, MAX_VOLUME ) ); + iTone->SetVolume(iVolume); + iTone->Play(); + iPlaying = ETrue; + TRACES("CStartupTone::Play(): End, return KErrNone"); + return KErrNone; + } + else + { + TRACES("CStartupTone::Play(): Audio not ready, hidden reset, volume null or tone is not initialized. Unable to play tone."); + TRACES1("CStartupTone::Play(): Audio ready: %d",iAudioReady); + TRACES1("CStartupTone::Play(): Hidden reset: %d",iHiddenReset); + TRACES1("CStartupTone::Play(): Volume: %d",iVolume); + TRACES1("CStartupTone::Play(): Tone: %d",iTone); + TRACES("CStartupTone::Play(): End, return KErrNotReady"); + return KErrNotReady; + } + } + +// --------------------------------------------------------- +// void CStartupTone::Stop() +// --------------------------------------------------------- +// + +void CStartupTone::Stop() + { + TRACES("CStartupTone::Stop()"); + if (iTone) + { + TRACES("CStartupTone::Stop(): Stop the tone"); + iPlaying=EFalse; + iTone->Stop(); + iToneType = EStartupNoTone; + MapcPlayComplete(KErrNone); + } + TRACES("CStartupTone::Stop(): End"); + } + +// --------------------------------------------------------- +// CStartupTone::ToneFound() +// --------------------------------------------------------- +// +TBool CStartupTone::ToneFound() + { + TBool status(EFalse); + if(iTone) + status = ETrue; + return status; + } + +// --------------------------------------------------------- +// CStartupTone::AudioReady() +// --------------------------------------------------------- +// +TBool CStartupTone::AudioReady() + { + return iAudioReady; + } + +// --------------------------------------------------------- +// void CStartupTone::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/) +// --------------------------------------------------------- +// +void CStartupTone::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/) + { + TRACES("CStartupTone::MapcInitComplete()"); + if (aError == KErrNone) + { + TRACES("CStartupTone::MapcInitComplete(): Ready to play startup tone"); + iAudioReady = ETrue; + } + else + { + TRACES("CStartupTone::MapcInitComplete(): Unable to play startup tone"); + } + TRACES("CStartupTone::MapcInitComplete(): End"); + } + +// --------------------------------------------------------- +// void CStartupTone::MapcPlayComplete(TInt /*aError*/) +// --------------------------------------------------------- +// +void CStartupTone::MapcPlayComplete(TInt /*aError*/) + { + TRACES("StartupTone::MapcPlayComplete()"); + iPlaying=EFalse; + if (iStartupWaitingForTone) + { + TRACES("StartupTone::MapcPlayComplete(): Startup waiting "); + TRAPD(err, iStartupAppUi->ContinueStartupAfterToneL(iToneType)); + if (err != KErrNone) + { + TRACES1("CStartupTone::MapcPlayComplete(): ContinueStartupAfterToneL() leaves, err = %d", err ); + } + } + TRACES("StartupTone::MapcPlayComplete(): End"); + } + +// --------------------------------------------------------- +// TBool CStartupTone::Playing() +// --------------------------------------------------------- +// +TBool CStartupTone::Playing() + { + TRACES1("StartupTone::Playing(): Return %d", iPlaying ); + return iPlaying; + } + +// --------------------------------------------------------- +// void CStartupTone::StartupWaiting() +// --------------------------------------------------------- +// +void CStartupTone::StartupWaiting(TBool aValue) + { + TRACES1("StartupTone::StartupWaiting(): aValue == %d", aValue); + iStartupWaitingForTone = aValue; + } + +// ---------------------------------------------------------- +// CStartupTone::GetRingingToneVolumeL +// Startup tone volume is always 4 but when ringing type is +// silent or ringing volume is 0 or 1 startup tone is silent. +// ---------------------------------------------------------- +// +TInt CStartupTone::GetRingingToneVolumeL() + { + TRACES("StartupTone::GetRingingToneVolumeL()"); + + TInt retval(0); + TInt ringingType(EProfileRingingTypeSilent); + TInt ringingVol(0); + + CRepository* repository(NULL); + + TRAPD( err, repository = CRepository::NewL( KCRUidProfileEngine ) ); + if ( err != KErrNone ) + { + TRACES("StartupTone::GetRingingToneVolumeL(): End, ERROR, Cannot connect to CenRep"); + return 0; + } + + User::LeaveIfError( repository->Get( KProEngActiveRingingVolume, ringingVol )); + User::LeaveIfError( repository->Get( KProEngActiveRingingType, ringingType )); + delete repository; + + TRACES1("StartupTone::GetRingingToneVolumeL(): Ringing tone volume = %d", ringingVol); + TRACES1("StartupTone::GetRingingToneVolumeL(): Ringing type = %d", ringingType); + + if ((ringingType != EProfileRingingTypeSilent) && + (ringingVol != 0) && + (ringingVol != EProfileRingingVolumeLevel1)) + { + TRACES("StartupTone::GetRingingToneVolumeL(): Get startup tone volume"); + TInt defaultRingingVol; + CRepository* repository(NULL); + + TRAPD( err, repository = CRepository::NewL( KCRUidStartupConf ) ); + if ( err != KErrNone ) + { + return 0; + } + + User::LeaveIfError( repository->Get( KStartupToneVolume, defaultRingingVol )); + delete repository; + + ringingVol = defaultRingingVol; + retval = ringingVol; + } + + TRACES1("StartupTone::GetRingingToneVolumeL(): End, return %d", retval); + return retval; + } + +// End of File