--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/coreapplicationuis/SysAp/Src/SysApShutdownTone.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2005 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 CSysApShutdownTone.
+* Is used to play shutdown tone.
+*
+*/
+
+
+// INCLUDE FILES
+#include <Profile.hrh>
+#include <centralrepository.h>
+#include <startupdomaincrkeys.h>
+#include <ProfileEngineSDKCRKeys.h>
+#include "SysApShutdownTone.h"
+#include "SysApShutdownAnimation.h"
+#include "SysAp.hrh"
+#include "AudioPreference.h"
+
+//=============================== MEMBER FUNCTIONS ============================
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CSysApShutdownTone::CSysApShutdownTone( CSysApShutdownAnimation* aCallback ) :
+ iCallback( aCallback ),
+ iTone( NULL ),
+ iAudioReady( EFalse ),
+ iPlaying( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CSysApShutdownTone::~CSysApShutdownTone()
+{
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::~CSysApShutdownTone()" )) );
+
+ if (iTone)
+ {
+ if (iPlaying)
+ {
+ TRACES( RDebug::Print( _L("CSysApShutdownTone: Still playing shutdown tone. Stop it!" )) );
+ iTone->Stop();
+ }
+ delete iTone;
+ iTone = NULL;
+ }
+}
+
+// ----------------------------------------------------
+// CSysApShutdownTone::NewL()
+// ----------------------------------------------------
+CSysApShutdownTone* CSysApShutdownTone::NewL(TDesC& aShutdownTonePath, CSysApShutdownAnimation* aCallback)
+{
+ CSysApShutdownTone* self = new (ELeave) CSysApShutdownTone(aCallback);
+
+ CleanupStack::PushL( self );
+ self->ConstructL(aShutdownTonePath);
+ CleanupStack::Pop(); // self
+
+ return self;
+}
+
+// ----------------------------------------------------
+// CSysApShutdownTone::ConstructL()
+// ----------------------------------------------------
+void CSysApShutdownTone::ConstructL(TDesC& aShutdownTonePath)
+{
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::ConstructL()" )) );
+ // Check tone volume
+ iVolume = GetRingingToneVolumeL();
+ TInt err( KErrNone );
+
+ if (iVolume)
+ {
+ TPath tonePath;
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::ConstructL(): Get tone to play, Path = %S"), &aShutdownTonePath));
+
+ RFs fs;
+ err = fs.Connect();
+ TFindFile findExe(fs);
+ err = findExe.FindByPath( aShutdownTonePath, NULL );
+ fs.Close();
+ if (err != KErrNone)
+ {
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::ConstructL(): Tone to play: Cannot find tone. err = %d"), err));
+ User::Leave(err);
+ }
+ else
+ {
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::ConstructL(): Tone found")));
+ iTone = CMdaAudioPlayerUtility::NewFilePlayerL(
+ aShutdownTonePath,
+ *this, KAudioPriorityPhonePower,
+ TMdaPriorityPreference( KAudioPrefDefaultTone));
+ }
+ }
+ else // Phone is in silent mode, tone can be set to be ready instantly
+ {
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::ConstructL(): No tone initialization performed, signaling callback instantly")));
+
+ if ( iCallback )
+ {
+ iCallback->ToneReady();
+ }
+ }
+}
+// ---------------------------------------------------------
+// void CSysApShutdownTone::Play()
+// ---------------------------------------------------------
+//
+
+TInt CSysApShutdownTone::Play()
+{
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::Play()" )) );
+ if (iAudioReady && iVolume && iTone)
+ {
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::Play(): Audio ready. Play tone." )) );
+ iVolume = Max( 0, Min( iVolume, 10 ) );
+ iTone->SetVolume(iVolume);
+ iTone->Play();
+ iPlaying = ETrue;
+ return KErrNone;
+ }
+ else
+ {
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::Play(): Audio not ready, hidden reset, volume null or tone is not initialized. Unable to play tone.")));
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::Play(): Audio ready: %d"),iAudioReady));
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::Play(): Volume: %d"),iVolume));
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::Play(): Tone: %d"),iTone));
+ return KErrNotReady;
+ }
+}
+
+// ---------------------------------------------------------
+// void CSysApShutdownTone::Stop()
+// ---------------------------------------------------------
+//
+void CSysApShutdownTone::Stop()
+{
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::Stop()" )) );
+ if (iTone)
+ {
+ iPlaying=EFalse;
+ iTone->Stop();
+ }
+
+ // Set null to callback as notifying tone readiness is no longer needed and causes incorrect
+ // functionality.
+ iCallback = NULL;
+}
+
+// ---------------------------------------------------------
+// void CSysApShutdownTone::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration)
+// ---------------------------------------------------------
+//
+void CSysApShutdownTone::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/)
+{
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::MapcInitComplete(), aError = %d" ),aError ) );
+ if (aError == KErrNone)
+ {
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::MapcInitComplete(): Ready to play shutdown tone." )) );
+ iAudioReady = ETrue;
+ }
+ else
+ {
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::MapcInitComplete(): Unable to play shutdown tone." )) );
+ }
+
+ if ( iCallback )
+ {
+ iCallback->ToneReady();
+ }
+}
+
+// ---------------------------------------------------------
+// void CSysApShutdownTone::MapcPlayComplete(TInt /*aError*/)
+// ---------------------------------------------------------
+//
+void CSysApShutdownTone::MapcPlayComplete(TInt /*aError*/)
+{
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::MapcPlayComplete()" )) );
+ iPlaying=EFalse;
+}
+
+// ---------------------------------------------------------
+// TBool CSysApShutdownTone::Playing()
+// ---------------------------------------------------------
+//
+TBool CSysApShutdownTone::Playing()
+{
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::Playing(): Playing(): %d"), iPlaying ));
+ return iPlaying;
+}
+
+// ----------------------------------------------------------
+// CSysApShutdownTone::GetRingingToneVolumeL
+// Shutdown tone volume is always 4 but when ringing type is
+// silent or ringing volume is 0 or 1 startup tone is silent.
+// ----------------------------------------------------------
+//
+TInt CSysApShutdownTone::GetRingingToneVolumeL()
+ {
+ TRACES( RDebug::Print( _L("CSysApShutdownTone::GetRingingToneVolumeL()" )) );
+
+ TInt retval(0);
+ TInt ringingType(EProfileRingingTypeSilent);
+ TInt ringingVol(0);
+
+ CRepository* repository = NULL;
+
+ TRAPD( err, repository = CRepository::NewL( KCRUidProfileEngine ) );
+ if ( err != KErrNone )
+ {
+ return 0;
+ }
+
+ if ( repository )
+ {
+ CleanupStack::PushL(repository);
+ User::LeaveIfError( repository->Get( KProEngActiveRingingVolume, ringingVol ));
+ User::LeaveIfError( repository->Get( KProEngActiveRingingType, ringingType ));
+ CleanupStack::PopAndDestroy(repository);
+ }
+
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::GetRingingToneVolumeL(): Ringing tone volume = %d"), ringingVol ));
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::GetRingingToneVolumeL(): Ringing type = %d"), ringingType ));
+
+ if ((ringingType != EProfileRingingTypeSilent) &&
+ (ringingVol != 0))
+ {
+ TInt defaultRingingVol;
+ CRepository* repository = NULL;
+
+ TRAPD( err, repository = CRepository::NewL( KCRUidStartupConf ) );
+ if ( err != KErrNone )
+ {
+ return 0;
+ }
+
+ if ( repository )
+ {
+ CleanupStack::PushL(repository);
+ User::LeaveIfError( repository->Get( KStartupToneVolume, defaultRingingVol ));
+ CleanupStack::PopAndDestroy(repository);
+ }
+
+ ringingVol = defaultRingingVol;
+ retval = ringingVol;
+ }
+
+ TRACES( RDebug::Print( _L( "CSysApShutdownTone::GetRingingToneVolumeL(): Shutdown tone volume = %d"), retval ));
+ return retval;
+ }
+
+// End of File