--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/audiomsg/src/audiomessagebeep.cpp Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2005-2006 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: Class that handles playback of tones in AudioMessage applicationn
+*
+*/
+
+
+
+#include <avkon.hrh>
+#include <aknappui.h>
+#include <AudioPreference.h>
+#include <aknsoundsystem.h>
+#include <aknSoundinfo.h>
+
+#include "audiomessagebeep.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::Constructor
+// ---------------------------------------------------------
+//
+CAudioMessageBeep::CAudioMessageBeep()
+ : iState( EVRToneIdle )
+ {
+ }
+
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::ConstructL
+// ---------------------------------------------------------
+//
+void CAudioMessageBeep::ConstructL()
+ {
+ iPlayer = CMdaAudioToneUtility::NewL( *this );
+
+ iSoundSystem = ( static_cast< CAknAppUi* >(
+ CEikonEnv::Static()->EikAppUi())->KeySounds() );
+ }
+
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::NewL
+// ---------------------------------------------------------
+//
+CAudioMessageBeep* CAudioMessageBeep::NewL()
+ {
+ CAudioMessageBeep* self = new ( ELeave ) CAudioMessageBeep;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::Destructor
+// ---------------------------------------------------------
+//
+CAudioMessageBeep::~CAudioMessageBeep()
+ {
+ if ( iPlayer )
+ {
+ switch ( iPlayer->State() )
+ {
+ case EMdaAudioToneUtilityNotReady:
+ {
+ iPlayer->CancelPrepare();
+ break;
+ }
+ case EMdaAudioToneUtilityPlaying:
+ {
+ iPlayer->CancelPlay();
+ break;
+ }
+ }
+ }
+ delete iPlayer;
+ }
+
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::PrepareToneL
+// Starts preparing the specified tone, preparing completes
+// with call-back to MatoPrepareComplete
+// ---------------------------------------------------------
+//
+void CAudioMessageBeep::PrepareToneL( TInt aToneId )
+ {
+ if ( iState != EVRToneIdle )
+ {
+ iQueuedTone = aToneId;
+ return;
+ }
+
+ // Retrieve the tone
+ CAknSoundInfo* info = CAknSoundInfo::NewL();
+ CleanupStack::PushL( info );
+ User::LeaveIfError( iSoundSystem->RequestSoundInfoL(
+ aToneId, *info ) );
+
+ iPreparedTone = aToneId;
+ iState = EVRTonePreparing;
+
+ iPlayer->PrepareToPlayDesSequence( *info->iSequence );
+ CleanupStack::PopAndDestroy( info );
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::PrepareTone
+// Non-leaving version of PrepareToneL
+// ---------------------------------------------------------
+//
+void CAudioMessageBeep::PrepareTone( TInt aToneId )
+ {
+ TRAP_IGNORE( PrepareToneL( aToneId ) );
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::PlayTone
+// Starts playback of specified tone. Completes with call-back to
+// MatoPlayComplete
+// ---------------------------------------------------------
+//
+void CAudioMessageBeep::PlayTone( TInt aToneId )
+ {
+ if ( iState != EVRToneIdle || iPreparedTone != aToneId ||
+ iPlayer->State() == EMdaAudioToneUtilityPlaying )
+ {
+ // Preparing an unprepared tone synchronously is not supported,
+ // tone playback is skipped
+ return;
+ }
+
+ // Preferences need to be set according to tone
+ switch ( aToneId )
+ {
+ case EAvkonSIDVoiceRecordingStartTone:
+ {
+ iPlayer->SetPriority( KAudioPriorityRecording,
+ TMdaPriorityPreference( KAudioPrefVoiceRecStart ) );
+ break;
+ }
+ case EAvkonSIDVoiceRecordingStopTone:
+ {
+ iPlayer->SetPriority( KAudioPriorityRecording,
+ TMdaPriorityPreference( KAudioPrefVoiceRecStop ) );
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ iState = EVRTonePlaying;
+
+ iPlayer->Play();
+ }
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::MatoPrepareComplete
+// ---------------------------------------------------------
+//
+void CAudioMessageBeep::MatoPrepareComplete(TInt aError)
+ {
+ if ( aError )
+ {
+ iPreparedTone = 0;
+ }
+
+ iState = EVRToneIdle;
+
+ // Prepare the next tone in queue
+ if ( iQueuedTone )
+ {
+ TRAP_IGNORE( PrepareToneL( iQueuedTone ) );
+ iQueuedTone = 0;
+ }
+
+
+ }
+
+
+// ---------------------------------------------------------
+// CAudioMessageBeep::MatoPlayComplete
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+void CAudioMessageBeep::MatoPlayComplete(TInt aError )
+ {
+ RDebug::Print( _L("AudioMessage: Tone %d played, error %d"), iPreparedTone, aError );
+#else
+void CAudioMessageBeep::MatoPlayComplete(TInt /*aError*/ )
+ {
+#endif
+
+ iState = EVRToneIdle;
+
+ // Prepare the next tone in queue
+ if ( iQueuedTone )
+ {
+ TRAP_IGNORE( PrepareToneL( iQueuedTone ) );
+ iQueuedTone = 0;
+ }
+ }