voiceui/voiceuivoicerecognition/src/vuicvoicerecogdialogimpl.cpp
branchRCL_3
changeset 19 e36f3802f733
parent 0 bf1d17376201
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voiceui/voiceuivoicerecognition/src/vuicvoicerecogdialogimpl.cpp	Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,721 @@
+/*
+* Copyright (c) 2004-2007 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:  The Voice Recognition dialog implementation
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+
+#include <voiceuidomainpskeys.h>
+
+#include "vuivoicerecognition.hrh"
+
+#include "vuicvoicerecogdialogimpl.h"
+
+#include "vuicpropertyhandler.h"
+
+#include "vuicdatastorage.h"
+#include "vuicuimodel.h"
+
+#include "vuicprecheckstate.h"
+
+#include "vuimvoicerecogdialogcallback.h"
+
+#include "rubydebug.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CVoiceRecognitionDialogImpl* CVoiceRecognitionDialogImpl::NewL( MVoiceRecognitionDialogCallback* aObserver )
+    {
+    RUBY_DEBUG_BLOCK( "CVoiceRecognitionDialogImpl::NewL" );
+    
+    CVoiceRecognitionDialogImpl* self = new (ELeave) CVoiceRecognitionDialogImpl( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// Destructor
+CVoiceRecognitionDialogImpl::~CVoiceRecognitionDialogImpl()
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::~CVoiceRecognitionDialogImpl START" );
+
+    iObserver = NULL;
+        
+    iMutex.Close();
+    
+    Cancel();
+
+    // If states are equal only one can be deleted       
+    if ( iState != iNextState )
+        {
+        delete iState;
+        delete iNextState;
+        }
+    else
+        {
+        delete iState;
+        }
+
+    delete iDataStorage;
+    delete iUiModel;    
+        
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::~CVoiceRecognitionDialogImpl EXIT" );
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::ExecuteL
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::ExecuteL()
+    {
+    RUBY_DEBUG_BLOCK( "CVoiceRecognitionDialogImpl::ExecuteL" );
+
+    ChangeState( CPrecheckState::NewL( *iDataStorage, *iUiModel ) );
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::SetDeviceLockMode
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::SetOnlyCallsAllowed()
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::SetOnlyCallsAllowed START" );
+    
+    iDataStorage->SetDeviceLockMode( ETrue );
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::SetOnlyCallsAllowed EXIT" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::CVoiceRecognitionDialogImpl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CVoiceRecognitionDialogImpl::CVoiceRecognitionDialogImpl( MVoiceRecognitionDialogCallback* aObserver )
+ : CActive( EPriorityStandard ), iObserver( aObserver )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::CVoiceRecognitionDialogImpl START" );
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::CVoiceRecognitionDialogImpl EXIT" );
+    }
+    
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::ConstructL()
+    {
+    RUBY_DEBUG_BLOCK( "CVoiceRecognitionDialogImpl::ConstructL" );
+    
+    CActiveScheduler::Add( this );
+    
+    iDataStorage = CDataStorage::NewL( this );
+    
+    iUiModel = CUiModel::NewL();
+    
+    iMutex.CreateLocal();
+    }
+            
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::RunL
+// Handle a change event.
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::RunL()
+    {
+    RUBY_DEBUG_BLOCK( "CVoiceRecognitionDialogImpl::RunL" );
+    
+    if ( iState != iNextState )
+        {
+        delete iState;
+        iState = iNextState;
+        }
+    iNextState = NULL;
+    
+    if ( iMutex.IsHeld() )
+        {
+        iMutex.Signal();
+        }
+    
+    TRAPD( error, iState->ExecuteL() );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::RunL - State execution failed with error [%d]", error );
+        Exit();
+        }
+    }
+        
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::DoCancel
+// Cancel the request to receive events.
+// ---------------------------------------------------------
+//        
+void CVoiceRecognitionDialogImpl::DoCancel()
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::DoCancel START" );
+
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::DoCancel EXIT" );
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleKeypressL
+// Called when a key is pressed
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandleKeypressL( TInt aSoftkey )
+    {
+    RUBY_DEBUG_BLOCK( "CVoiceRecognitionDialogImpl::HandleKeypressL" );
+    
+    CheckState();
+    
+    TRAPD( error, iState->HandleEventL( aSoftkey ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleKeypressL - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleRecognizeInitComplete
+// Called when HandleRecognizeInit() completes
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandleRecognizeInitComplete( TNssRecognizeInitError aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleRecognizeInitComplete START" );
+    
+    CheckState();
+       
+    TInt errorCode = KErrNone;
+    
+    if ( aErrorCode == MNssRecognizeInitCompleteHandler::EVasRecognizeInitFailed )
+        {
+        errorCode = KErrInit;
+        }
+    else if ( aErrorCode == MNssRecognizeInitCompleteHandler::EVasNoTagInContexts )
+        {
+        errorCode = KErrNoContacts;
+        }
+    else if ( aErrorCode != MNssRecognizeInitCompleteHandler::EVasErrorNone )
+        {
+        errorCode = KErrGeneral;
+        }
+    
+    TRAPD( error, iState->HandleEventL( errorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleRecognizeInitComplete - Event handling failed with error [%d]", error );
+        Exit();
+        }
+   
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleRecognizeInitComplete EXIT" );
+    }
+
+#ifndef __WINS__  
+#ifdef __FULLDUPLEX_CHANGE
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandlePreSamplingStarted
+// Called when HandlePreSamplingStarted() completes
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandlePreSamplingStarted( TInt aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandlePreSamplingStarted START" );
+    
+    CheckState();
+          
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandlePreSamplingStarted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+   
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandlePreSamplingStarted EXIT" );
+    }
+#endif // __FULLDUPLEX_CHANGE
+#endif // __WINS__  
+   
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleRecordStarted
+// Called when recording has started
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandleRecordStarted()
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleRecordStarted START" );
+    
+    CheckState();
+
+    TRAPD( error, iState->HandleEventL( KErrNone ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleRecordStarted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleRecordStarted EXIT" );
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleEouDetected
+// Called when end-of-utterance is detected
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandleEouDetected()
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleEouDetected START" );
+    
+    CheckState();
+    
+    TRAPD( error, iState->HandleEventL( KErrNone ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleEouDetected - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleEouDetected EXIT" );
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleRecognizeComplete
+// Called when recognition ends
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandleRecognizeComplete( CArrayPtrFlat<MNssTag>* aTagList,
+                                                           TNssRecognizeError aErrorCode  )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleRecognizeComplete START" );
+    
+    CheckState();
+
+    TInt errorCode = KErrNone;
+    
+    if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognitionFailedNoMatch )
+        {
+        errorCode = KErrNoMatch;
+        }
+    else if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognizeAccessDeny )
+        {
+        errorCode = KErrAbort;
+        }
+    else if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognizeFailed )
+        {
+        errorCode = KErrRecogFailed;
+        }
+    else if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognitionFailedNoSpeech )
+        {
+        errorCode = KErrNoSpeech;
+        }
+    else if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognitionFailedTooEarly )
+        {
+        errorCode = KErrTooEarly;
+        }
+    else if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognitionFailedTooLong )
+        {
+        errorCode = KErrTooLong;
+        }
+    else if ( aErrorCode == MNssRecognizeEventHandler::EVasRecognitionFailedTooShort )
+        {
+        errorCode = KErrTooShort;
+        }
+    else if ( aErrorCode != MNssRecognizeEventHandler::EVasErrorNone )
+        {
+        errorCode = KErrGeneral;
+        }
+
+    // If complete tag list has been set then results are voice verification results
+    // and should be put to additional tag list
+    if ( !iDataStorage->CompleteTagList() )
+        {
+        iDataStorage->SetCompleteTagList( aTagList );
+        }
+    else
+        {
+        iDataStorage->SetAdditionalTagList( aTagList );
+        }
+
+    TRAPD( error, iState->HandleEventL( errorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleRecognizeComplete - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleRecognizeComplete EXIT" );
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleAdaptComplete
+// Called when the adaptation is complete
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandleAdaptComplete( TInt aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleAdaptComplete START" );
+    
+    CheckState();
+      
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleAdaptComplete - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleAdaptComplete EXIT" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::MapcInitComplete
+// CMdaAudioPlayerUtility initialization complete
+// ---------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::MapcInitComplete( TInt aError,
+                                                    const TTimeIntervalMicroSeconds& aDuration )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::MapcInitComplete START" );
+    
+    CheckState();
+
+    iDataStorage->SetPlayDuration( aDuration );
+    
+    TRAPD( error, iState->HandleEventL( aError ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::MapcInitComplete - Event handling failed with error [%d]", error );
+        Exit();
+        }
+
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::MapcInitComplete EXIT" );
+    }
+
+// ---------------------------------------------------------------------------
+// CVoiceRecogPlaybackDialog::MapcPlayComplete
+// Playback complete, notify observer
+// ---------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::MapcPlayComplete( TInt aError )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::MapcPlayComplete START" );
+    
+    CheckState();
+ 
+    TRAPD( error, iState->HandleEventL( aError ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::MapcPlayComplete - Event handling failed with error [%d]", error );
+        Exit();
+        }
+        
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::MapcPlayComplete EXIT" );
+    }
+    
+// ---------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::MapcCustomCommandEvent
+// Called when asynchronous custom command finishes.
+// ---------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::MapcCustomCommandEvent( TInt /*aEvent*/, TInt aError )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::MapcCustomCommandEvent START" );
+    
+    CheckState();
+      
+    TRAPD( error, iState->HandleEventL( aError ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::MapcCustomCommandEvent - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::MapcCustomCommandEvent EXIT" );
+    }
+    
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::GetContextCompleted
+// -----------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::GetContextCompleted( MNssContext* aContext, TInt aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::GetContextCompleted START" );
+    
+    CheckState();
+    
+    iDataStorage->SetContext( aContext );
+      
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::GetContextCompleted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::GetContextCompleted EXIT" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::GetContextListCompleted
+// -----------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::GetContextListCompleted( MNssContextListArray* /*aContextList*/,
+                                                           TInt aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::GetContextListCompleted START" );
+    
+    CheckState();
+      
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::GetContextListCompleted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::GetContextListCompleted EXIT" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::GetTagListCompleted
+// -----------------------------------------------------------------------------
+//    
+void CVoiceRecognitionDialogImpl::GetTagListCompleted( MNssTagListArray* aTagList, TInt aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::GetTagListCompleted START" );
+    
+    CheckState();
+
+    iDataStorage->SetAdditionalTagList( aTagList );
+
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::GetTagListCompleted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::GetTagListCompleted EXIT" );
+    }
+    
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::SaveContextCompleted
+// -----------------------------------------------------------------------------
+//  
+void CVoiceRecognitionDialogImpl::SaveContextCompleted( TInt aErrorCode )
+	{
+	RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::SaveContextCompleted START" );
+	
+    CheckState();
+
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::SaveContextCompleted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::SaveContextCompleted EXIT" );
+	}
+    
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::HandleTrainComplete
+// -----------------------------------------------------------------------------
+//       
+void CVoiceRecognitionDialogImpl::HandleTrainComplete( TInt aErrorCode )
+	{
+	RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleTrainComplete START" );
+    
+    CheckState();
+
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::HandleTrainComplete - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandleTrainComplete EXIT" );
+	}
+    
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::SaveTagCompleted
+// -----------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::SaveTagCompleted( TInt aErrorCode )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::SaveTagCompleted START" );
+    
+    CheckState();
+
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::SaveTagCompleted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::SaveTagCompleted EXIT" );
+    }
+
+// -----------------------------------------------------------------------------
+// CVoiceRecognitionDialogImpl::DeleteContextCompleted
+// -----------------------------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::DeleteContextCompleted( TInt aErrorCode )
+	{
+	RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::DeleteContextCompleted START" );
+    
+    CheckState();
+
+    TRAPD( error, iState->HandleEventL( aErrorCode ) );
+    
+    if ( error != KErrNone )
+        {
+        RUBY_DEBUG1( "CVoiceRecognitionDialogImpl::DeleteContextCompleted - Event handling failed with error [%d]", error );
+        Exit();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::DeleteContextCompleted EXIT" );
+	}
+    
+// ----------------------------------------------------
+// CVoiceRecognitionDialog::HandlePropertyValueChange
+// Handle property value change event.
+// ----------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::HandlePropertyValueChange( TInt aValue )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandlePropertyValueChange START" );
+    
+    CheckState();
+   
+    switch( aValue )
+        {
+        // Short press of a headset key
+        case KVoiceUiShortPressEvent:
+            {
+            TRAP_IGNORE( iState->HandleEventL( EShortKeypress ) );
+            break;
+            }
+
+        // Long press of a headset key
+        case KVoiceUiLongPressEvent:
+            {
+            TRAP_IGNORE( iState->HandleEventL( ELongKeypress ) );
+            break;
+            }
+
+        default:
+            {
+            // pass
+            break;
+            }
+        }
+
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::HandlePropertyValueChange EXIT" );         
+    }
+       
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::ChangeState
+// Change current state and set object active
+// ---------------------------------------------------------
+//  
+void CVoiceRecognitionDialogImpl::ChangeState( CState* aNextState )
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::ChangeState START" ); 
+    
+    if ( aNextState )
+        {
+        CheckState();
+        
+        iNextState = aNextState;
+        
+        if ( !IsActive() )
+            {
+            TRequestStatus* pRS = &iStatus;
+            User::RequestComplete( pRS, KErrNone );
+            SetActive();
+            }        
+        }       
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::ChangeState EXIT" ); 
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::CheckState
+// Check if state can be changed and if it can't starts waiting
+// ---------------------------------------------------------
+//      
+void CVoiceRecognitionDialogImpl::CheckState()
+    {
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::CheckState START" ); 
+    
+    if ( iNextState )
+        {
+        RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::CheckState - Start waiting" );
+        iMutex.Wait();
+        }
+    
+    RUBY_DEBUG0( "CVoiceRecognitionDialogImpl::CheckState EXIT" ); 
+    }
+
+// ---------------------------------------------------------
+// CVoiceRecognitionDialogImpl::Exit
+// 
+// ---------------------------------------------------------
+//
+void CVoiceRecognitionDialogImpl::Exit()
+    {
+    if ( iObserver )
+        {
+        iObserver->DialogDismissed();
+        
+        iObserver = NULL;
+        }
+    }
+
+// End of File