voiceui/voiceuivoicerecognition/src/vuictutorial.cpp
branchRCL_3
changeset 19 e36f3802f733
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/voiceui/voiceuivoicerecognition/src/vuictutorial.cpp	Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,374 @@
+/*
+* Copyright (c) 2006-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:  Handles tutorial mode resources and dialog showing
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <avkon.rsg>
+#include <avkon.hrh>
+#include <centralrepository.h>
+#include <vcommanddomaincrkeys.h>
+#include <e32property.h>
+#include <ScreensaverInternalPSKeys.h>
+
+#include <vuivoicerecognition.rsg>
+
+#include "vuivoicerecognition.hrh"
+
+#include "vuictutorial.h"
+#include "vuictutorialmessagedialog.h"
+
+#include "rubydebug.h"
+
+// -----------------------------------------------------------------------------
+// CTutorial::InstanceL
+// -----------------------------------------------------------------------------
+//
+CTutorial* CTutorial::NewL()
+    {
+    CTutorial* self = new ( ELeave ) CTutorial();
+    CleanupStack::PushL( self ); 
+    self->ConstructL(); 
+    CleanupStack::Pop( self ); 
+    return self; 
+    }
+    
+// Destructor       
+CTutorial::~CTutorial()
+    {
+    RUBY_DEBUG0( "CTutorial::~CTutorial START" );
+    
+    // Save tutorial mode settings before exiting
+    TRAP_IGNORE( SaveSettingsL() );
+    
+    DestroyMessage();
+    
+    RUBY_DEBUG0( "CTutorial::~CTutorial EXIT" );
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::CreateMessageL
+// -----------------------------------------------------------------------------
+//
+void CTutorial::CreateMessageL()
+    {
+    RUBY_DEBUG_BLOCK( "CTutorial::CreateMessageL" );
+    
+    if ( iDlg )
+        {
+        User::Leave( KErrAlreadyExists );
+        }
+       
+    iDlg = CTutorialMessageDialog::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::CreateAndShowMessageL
+// -----------------------------------------------------------------------------
+//
+TInt CTutorial::CreateAndShowMessageL()
+    {
+    RUBY_DEBUG_BLOCK( "CTutorial::CreateAndShowMessageL" );
+    
+    CreateMessageL();
+    return ShowMessageL();
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::ShowMessageL
+// -----------------------------------------------------------------------------
+//
+TInt CTutorial::ShowMessageL( TBool aDeviceLockMode )
+    {
+    RUBY_DEBUG_BLOCK( "CTutorial::ShowMessageL" );
+    
+    TInt returnValue = KErrGeneral;    
+    
+    switch( iState )
+        {
+        case EIntroState:
+            
+            if ( IsTutorialModeEnabled() && iTutorialMode )
+                {
+                iState = ECommandState;
+                returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_INTRO_TITLE,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_INTRO_TEXT_UP,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_INTRO_TEXT_DOWN,
+                                                        R_SOFTKEYS_NEXT_CANCEL__NEXT );
+                }
+            else if ( IsTutorialModeEnabled() && !aDeviceLockMode )
+                {
+                iState = ETryState;
+                returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_INTRO_TITLE,
+                                                        R_TEXT_SIND_TUTORIAL_FIRST_TIME_TEXT_UP,
+                                                        R_TEXT_SIND_TUTORIAL_FIRST_TIME_TEXT_DOWN,
+                                                        R_SOFTKEYS_ACTIVATE_CANCEL__ACTIVATE,
+                                                        SecondaryDisplay::ECmdShowFirstTimeActivationQuery );
+                if ( returnValue == EVoiceInfoSoftKeyActivate )
+                    {
+                    DisableFirstTimeMode();
+                    }
+                }
+            else 
+                {
+                iState = ETryState;
+                }
+            break;
+            
+        case ECommandState:
+            
+            iState = EDialState;
+            returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_COMMAND_TITLE,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_COMMAND_TEXT_UP,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_COMMAND_TEXT_DOWN,
+                                                    R_SOFTKEYS_NEXT_CANCEL__NEXT );
+            break;
+            
+        case EDialState:
+            
+            iState = EOtherState;
+            returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_DIAL_TITLE,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_DIAL_TEXT_UP,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_DIAL_TEXT_DOWN,
+                                                    R_SOFTKEYS_NEXT_CANCEL__NEXT );
+            break;
+
+        case EOtherState:
+            
+            iState = ETryState;
+            returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_OTHER_TITLE,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_OTHER_TEXT_UP,
+                                                    R_TEXT_SIND_TUTORIAL_PAGE_OTHER_TEXT_DOWN,
+                                                    R_SOFTKEYS_NEXT_CANCEL__NEXT );
+            break;
+
+        case ETryState:
+            
+            iState = EBestState;
+            if ( IsTutorialModeEnabled() && !aDeviceLockMode )
+                {
+                returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_TRY_TITLE,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_TRY_TEXT_UP,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_TRY_TEXT_DOWN,
+                                                        R_SOFTKEYS_ACTIVATE_CANCEL__ACTIVATE );
+                }
+            break;
+
+        case EBestState:
+            
+            iState = EActivationState;
+            if ( IsTutorialModeEnabled() && !aDeviceLockMode )
+                {
+                returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_BEST_TITLE,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_BEST_TEXT_UP,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_BEST_TEXT_DOWN,
+                                                        R_SOFTKEYS_NEXT_CANCEL__NEXT );
+                }
+            break;
+
+        case EActivationState:
+            
+            iState = EFinishedState;
+            if ( IsTutorialModeEnabled() && !aDeviceLockMode )
+                {
+                returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_ACTIVATION_TITLE,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_ACTIVATION_TEXT,
+                                                        KErrNone,
+                                                        R_AVKON_SOFTKEYS_QUIT );
+                }
+            break;
+
+        case EErrorState:
+            
+            iState = EFinishedState;
+            if ( IsTutorialModeEnabled() && !aDeviceLockMode )
+                {
+                returnValue = iDlg->ShowMessageDialogL( R_MESSAGE_QUERY,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_ERROR_TITLE,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_ERROR_TEXT_UP,
+                                                        R_TEXT_SIND_TUTORIAL_PAGE_ERROR_TEXT_DOWN,
+                                                        R_SOFTKEYS_NEXT_CANCEL__NEXT );
+                if ( returnValue == EVoiceInfoSoftKeyNext )
+                    {
+                    iState = ETryState;
+                    }
+                }
+            break;
+            
+        default:
+            returnValue = KErrCancel;
+            break;
+        }
+        
+        if ( returnValue == EVoiceInfoSoftKeyCancel || returnValue == EAknSoftkeyQuit )
+            {
+            iTutorialMode = EFalse;
+            returnValue = KErrCancel;
+            }
+        else if ( returnValue == KErrNone )
+            {
+            // Return general error because dialog has been canceled without any keypress
+            returnValue = KErrGeneral;
+            }
+        else if ( returnValue != KErrCancel )
+            {
+            returnValue = KErrNone;
+            }
+        
+    return returnValue;
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::DestroyMessage
+// -----------------------------------------------------------------------------
+//
+void CTutorial::DestroyMessage()
+    {
+    RUBY_DEBUG0( "CTutorial::DestroyMessage START" );
+    
+    if ( iDlg )
+        {
+        delete iDlg;
+        iDlg = NULL;
+        }
+    
+    RUBY_DEBUG0( "CTutorial::DestroyMessage EXIT" );    
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::GetTutorialState
+// -----------------------------------------------------------------------------
+//
+CTutorial::TTutorialState CTutorial::GetTutorialState()
+    {
+    RUBY_DEBUG0( "CTutorial::GetTutorialState" );
+    return iState;
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::ShowError
+// -----------------------------------------------------------------------------
+//
+void CTutorial::ErrorState()
+    {
+    RUBY_DEBUG0( "CTutorial::ErrorState" );
+    iState = EErrorState;
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::IsTutorialModeEnabled
+// -----------------------------------------------------------------------------
+//
+TBool CTutorial::IsTutorialModeEnabled()
+    {
+    RUBY_DEBUG0( "CTutorial::IsTutorialModeEnabled" );
+    return iTutorialMode || iFirstTimeMode;
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::DisableTutorialMode
+// -----------------------------------------------------------------------------
+//
+void CTutorial::DisableFirstTimeMode()
+    {
+    RUBY_DEBUG0( "CTutorial::DisableFirstTimeMode" );
+    if ( !iTutorialMode )
+        {
+        iFirstTimeMode = EFalse;
+        
+        TRAP_IGNORE( SaveSettingsL() );
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorial::CTutorial
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CTutorial::CTutorial()
+ : iTutorialMode( EFalse ), iFirstTimeMode( EFalse ), iState( EIntroState )
+    {
+    // Nothing
+    }
+
+// -----------------------------------------------------------------------------
+// CTutorialMessageDialog::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CTutorial::ConstructL()
+    {
+    RUBY_DEBUG_BLOCK( "CTutorial::ConstructL" );
+    
+    LoadSettingsL();
+    }
+
+// ---------------------------------------------------------------------------
+// CTutorial::LoadSettingsL
+// ---------------------------------------------------------------------------
+//
+void CTutorial::LoadSettingsL()
+    {
+    RUBY_DEBUG_BLOCK( "CTutorial::LoadSettingsL" );
+    
+    CRepository* client = CRepository::NewLC( KCRUidVCommandSettings );
+    
+    User::LeaveIfError( client->Get( KVuiDemoFirstTime,
+                                     iFirstTimeMode ) );
+    
+    User::LeaveIfError( client->Get( KVuiDemoMode,
+                                     iTutorialMode ) );
+
+    CleanupStack::PopAndDestroy( client );
+    
+    if ( iTutorialMode )
+        {
+        //Allow screensaver if in tutorial mode
+        RProperty::Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, 0 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CTutorial::SaveSettingsL
+// ---------------------------------------------------------------------------
+//
+void CTutorial::SaveSettingsL()
+    {
+    RUBY_DEBUG_BLOCK( "CTutorial::SaveSettingsL" );
+    
+    CRepository* client = CRepository::NewLC( KCRUidVCommandSettings );
+
+    User::LeaveIfError( client->Set( KVuiDemoFirstTime,
+                                     iFirstTimeMode ) );
+                        
+    User::LeaveIfError( client->Set( KVuiDemoMode,
+                                     EFalse ) );
+
+    CleanupStack::PopAndDestroy( client );
+    }
+
+// End of File
+