diff -r cad71a31b7fc -r e36f3802f733 voiceui/vcommand/src/vcplaybackdialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voiceui/vcommand/src/vcplaybackdialog.cpp Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,324 @@ +/* +* Copyright (c) 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: Implementation of CVCPlaybackDialog +* +*/ + + + +// INCLUDE FILES + +#include +#include +#include +#include +#include +#include +#include "vcplaybackdialog.h" +#include "vcmodel.h" +#include "rubydebug.h" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CVCPlaybackDialog::CVCPlaybackDialog +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CVCPlaybackDialog::CVCPlaybackDialog( CVCommandHandler& aService, + const CVCommandUiEntry& aCommand ) : + CAknProgressDialog( NULL ), + iService( aService ), + iCommand( aCommand ) + { + iTModel.iFinalValue = KVoiceTagRecordLength; + iTModel.iHundreths = KInterval; + iTModel.iIncrement = KVoiceTagIncrement; + iTModel.iRunning = EFalse; + iVisibilityDelayOff = ETrue; + } + + +// Destructor +CVCPlaybackDialog::~CVCPlaybackDialog() + { + if (iProgressBarTimer) + { + iProgressBarTimer->Cancel(); + delete iProgressBarTimer; + } + if (iProgressInfo) + { + iProgressInfo = NULL; + } + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::PreLayoutDynInitL +// --------------------------------------------------------- +// +void CVCPlaybackDialog::PreLayoutDynInitL() + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::PreLayoutDynInitL" ); + + HBufC* text = StringLoader::LoadLC( R_QTN_VC_PLAYING ); + SetTextL( *text ); + CleanupStack::PopAndDestroy( text ); + + ButtonGroupContainer().SetCommandSetL( R_SOFTKEYS_QUIT ); + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::PostLayoutDynInitL +// --------------------------------------------------------- +// +void CVCPlaybackDialog::PostLayoutDynInitL() + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::PostLayoutDynInitL" ); + + // FIrst check if a user edited command exists + if( iCommand.AlternativeSpokenText().Length() > 0 ) + { + iCommand.PlayAlternativeSpokenTextL( iService, *this ); + } + else + { + iCommand.PlaySpokenTextL( iService, *this ); + } + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::OkToExitL +// --------------------------------------------------------- +// +TBool CVCPlaybackDialog::OkToExitL( TInt aButtonId ) + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::OkToExitL" ); + + // Finished playing + if ( iExitWhenCalledBack ) + { + return ETrue; + } + + if ( ( iTickCount < 1 ) && ( !iExitFlag ) ) + { + return EFalse; + } + + // Check what button was pressed + switch ( aButtonId ) + { + case EAknSoftkeyOk: + break; + + case EKeyPhoneEnd: + case EKeyApplication: + case EAknSoftkeyQuit: + { + iOkToExit = ETrue; + + if ( iExitFlag ) + { + iCommand.CancelPlaybackL( iService ); + } + + break; + } + + //case EVCommandSoftKeyQuit: + case EAknSoftkeyDone: + { + iOkToExit = ETrue; + + iCommand.CancelPlaybackL( iService ); + + break; + } + + default: + iOkToExit = EFalse; + break; + } + + return iOkToExit; + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::OfferKeyEventL +// --------------------------------------------------------- +// +TKeyResponse CVCPlaybackDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::OfferKeyEventL" ); + + // Only react to red and application key + if ( aType == EEventKey ) + { + if ( aKeyEvent.iCode == EKeyApplication ) + { + iExitFlag = ETrue; + TryExitL( EKeyApplication ); + return EKeyWasConsumed; + } + else if ( aKeyEvent.iCode == EKeyPhoneEnd ) + { + iExitFlag = ETrue; + TryExitL( EKeyPhoneEnd ); + return EKeyWasConsumed; + } + } + + return EKeyWasConsumed; + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::StartTimerL +// --------------------------------------------------------- +// +void CVCPlaybackDialog::StartTimerL() + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::StartTimerL" ); + + iTickCount=0; + iProgressBarTimer = CPeriodic::NewL( CActive::EPriorityStandard ); + TTimeIntervalMicroSeconds32 delay( KDelay ); + TTimeIntervalMicroSeconds32 interval( KMicroSecondsInterval*iTModel.iHundreths ); + iProgressBarTimer->Start( delay,interval, TCallBack( OnTick, this ) ); + } + +// --------------------------------------------------------- +// CVCPlaybackDialog::StopTimer +// --------------------------------------------------------- +// +void CVCPlaybackDialog::StopTimer() + { + if ( iProgressBarTimer ) + { + iProgressBarTimer->Cancel(); + delete iProgressBarTimer; + iProgressBarTimer = NULL; + } + } + +// --------------------------------------------------------- +// CVCPlaybackDialog::OnTick +// --------------------------------------------------------- +// +TInt CVCPlaybackDialog::OnTick( TAny* aObject ) + { + STATIC_CAST( CVCPlaybackDialog*, aObject )->DoTick(); + return 1; // magic + } + +// --------------------------------------------------------- +// CVCPlaybackDialog::DoTick +// --------------------------------------------------------- +// +void CVCPlaybackDialog::DoTick() + { + if ( iTickCount != iTModel.iFinalValue+1 ) + { + iProgressInfo->IncrementAndDraw( iTModel.iIncrement ); + iTickCount++; + } + + if (iExitFlag) + { + RUBY_DEBUG0( "CVCPlaybackDialog::DoTick: Exit due to iExitFlag" ); + StopTimer(); + } + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::DoHandlePlayErrorL +// --------------------------------------------------------- +// +void CVCPlaybackDialog::DoHandlePlayErrorL( TNssPlayResult aResult ) + { + RUBY_DEBUG1( "CVCPlaybackDialog::DoHandlePlayErrorL: [%d]", aResult ); + HandlePlayComplete( aResult ); + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::HandlePlayStarted +// --------------------------------------------------------- +// +void CVCPlaybackDialog::HandlePlayStarted( + TTimeIntervalMicroSeconds32 aDuration ) + { + TRAP_IGNORE( DoHandlePlayStartedL( aDuration ) ); + } + +// --------------------------------------------------------- +// CVCPlaybackDialog::DoHandlePlayStartedL +// --------------------------------------------------------- +// +void CVCPlaybackDialog::DoHandlePlayStartedL( + TTimeIntervalMicroSeconds32 aDuration ) + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::DoHandlePlayStartedL" ); + + iTModel.iFinalValue = aDuration.Int()/KMicroSecondsInterval; + iProgressInfo = GetProgressInfoL(); + iProgressInfo->SetFinalValue( iTModel.iFinalValue ); + StartTimerL(); + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::HandlePlayComplete +// --------------------------------------------------------- +// +#ifdef _DEBUG +void CVCPlaybackDialog::HandlePlayComplete( TNssPlayResult aErrorCode ) +#else +void CVCPlaybackDialog::HandlePlayComplete( TNssPlayResult /*aErrorCode*/ ) +#endif + { + RUBY_DEBUG1( "CVCPlaybackDialog::HandlePlayComplete: [%d]", aErrorCode ); + iExitWhenCalledBack = ETrue; + StopTimer(); + TRAP_IGNORE( TryExitL( EAknSoftkeyOk) ); + } + + +// --------------------------------------------------------- +// CVCPlaybackDialog::DisplayErrorNoteL +// --------------------------------------------------------- +// +void CVCPlaybackDialog::DisplayErrorNoteL() + { + RUBY_DEBUG_BLOCKL( "CVCPlaybackDialog::DisplayErrorNoteL" ); + + iExitFlag = ETrue; + iOkToExit = ETrue; + HBufC* text = StringLoader::LoadLC( R_TEXT_VOICE_SYSTEM_ERROR ); + CAknErrorNote* dlg = new (ELeave) CAknErrorNote( ETrue ); + dlg->ExecuteLD( *text ); + CleanupStack::PopAndDestroy( text ); + } + + +// End of File