diff -r cad71a31b7fc -r e36f3802f733 srsf/vcommandhandler/src/storedvcommand.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/srsf/vcommandhandler/src/storedvcommand.cpp Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,165 @@ +/* +* 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: Voice command with the link to the VAS +* +*/ + + + +#include +#include "vcommandinternalapi.h" +#include "rubydebug.h" + + /** +* Factory function. Create a const snapshop of exe-ui-vastext collection +* @param aText Text to be trained by VAS. Can be of any length, however +* only first KNssVasDbTagName characters will be trained by VAS +* @see KNssVasDbTagName in nssvasdbkonsts.h +* @param aRunnable Executable to be fired when the command is recognized. +* VCommand takes the ownership on the aRunnable +* @param aUi visible strings to be displayed in VC App. VCommand takes +* the ownership on the aUi +*/ +CStoredVCommand* CStoredVCommand::NewL( const TDesC& aText, const CVCRunnable& aRunnable, + const CVCCommandUi& aUi, TInt aCommandId ) + { + CStoredVCommand* self = new (ELeave) CStoredVCommand; + CleanupStack::PushL( self ); + self->ConstructL( aText, aRunnable, aUi, aCommandId ); + CleanupStack::Pop( self ); + return self; + } + +/** +* Internalizes the command from stream +* @leave KErrNotSupported if the stream data format is unsupported +* e.g. if it has been written by newer implementation +*/ +CStoredVCommand* CStoredVCommand::NewL( RReadStream &aStream, TInt aCommandId ) + { + CStoredVCommand* self = new (ELeave) CStoredVCommand; + CleanupStack::PushL( self ); + self->ConstructL( aStream, aCommandId ); + CleanupStack::Pop( self ); + return self; + } + +/** +* @see CVCommand::ConstructL +*/ +void CStoredVCommand::ConstructL( const TDesC& aText, const CVCRunnable& aRunnable, + const CVCCommandUi& aUi, TInt aCommandId ) + { + CVCommand::ConstructL( aText, aRunnable, aUi ); + iCommandId = aCommandId; + } + +/** +* @see CVCommand::ConstructL +*/ +void CStoredVCommand::ConstructL( RReadStream& aStream, TInt aCommandId ) + { + CVCommand::ConstructL( aStream ); + iCommandId = aCommandId; + } + +/** +* Clone itself +* Is used for copying via NewL( CVCommand& aOriginal ) +*/ +CVCommand* CStoredVCommand::CloneL() const + { + CVCommand* clone = CStoredVCommand::NewL( SpokenText(), Runnable(), + CommandUi(), CommandId() ); + return clone; + } + +/** +* @return CommandId +*/ +TInt CStoredVCommand::CommandId() const + { + return iCommandId; + } + +/** +* Asynchronous +* Attempts to play back the text expected to be recognized. +* To be playable command has to be added to CVCommandHandler AND +* then retrieved back +* +* @param aHandler CVCommandHandler where the command is stored +* @todo Consider storing link to CVCommandHandler within the CStoredVCommand +* Pros: No clumsy aHandler argument for the playback +* Pros: No need to remember in which handler the command is stored +* and why specifying storage is needed during the playback +* Cons: In case of internal link the linked handler should still +* exist. It cannot be e.g. destroyed and recreated later even +* if the latter one is using the same VAS +* +* @param aPlayEventHandler Entity that handles the playback callbacks +* @see NssVasMPlayEventHandler.h +* +* @leave KErrBadHandle if the current command has not been retrieved +* from CVCommandHandler (i.e. was not trained for recognition) +* @leave KErrNotFound if this command cannot be found in aHandler +* @leave KErrNotReady @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult +* EVasUnexpectedRequest +* @leave KErrInUse @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult +* EVasInUse +* @leave KErrArgument @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult +* EVasInvalidParameter +* @leave KErrGeneral @see nssvasmspeechitem.h MNssSpeechItem::TNssSpeechItemResult +* EVasPlayFailed +*/ +void CStoredVCommand::PlaySpokenTextL( const CVCommandHandler& aHandler, + MNssPlayEventHandler& aPlayEventHandler ) const + { + RUBY_DEBUG_BLOCK( "CStoredVCommand::PlaySpokenTextL" ); + aHandler.PlaySpokenTextL( *this, aPlayEventHandler ); + } + +/** +* Plays back the user-specified alternative spoken text. +* Otherwise is identical to PlaySpokenTextL +* @see PlaySpokenTextL +* @leave KErrNotFound if this command cannot be found in aHandler of if +* it doesn't have a user-specified text +*/ +void CStoredVCommand::PlayAlternativeSpokenTextL( const CVCommandHandler& aHandler, + MNssPlayEventHandler& aPlayEventHandler ) const + { + RUBY_DEBUG_BLOCK( "CStoredVCommand::PlaySpokenTextL" ); + aHandler.PlayAlternativeSpokenTextL( *this, aPlayEventHandler ); + } + +/** +* Cancels playback of a spoken or alternative spoken text +* To be playable command has to be added to CVCommandHandler AND +* then retrieved back. After this function neither HandlePlayStarted, +* nor HandlePlayComplete will be called +* +* @param aHandler CVCommandHandler where the command is stored +* +* @leave KErrBadHandle if the current command has not been retrieved +* from CVCommandHandler (i.e. was not trained for recognition) +* @leave KErrNotReady if playback has never been started +* +*/ +void CStoredVCommand::CancelPlaybackL( const CVCommandHandler& aHandler ) const + { + aHandler.CancelPlaybackL( *this ); + } + +//End of file