srsf/vcommandmanager/src/vcmanagervoicekeylauncher.cpp
branchRCL_3
changeset 19 e36f3802f733
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srsf/vcommandmanager/src/vcmanagervoicekeylauncher.cpp	Wed Sep 01 12:29:17 2010 +0100
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2005-2008 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:  Observer voice key presses
+*
+*/
+
+
+#include "vcmanagervoicekeylauncher.h"
+#include "rubydebug.h"
+#include <featmgr.h>
+#include <eikappui.h>
+#include <apgcli.h>
+#include <apgtask.h>
+#include <apacmdln.h>
+#include <apgwgnam.h>
+
+
+// CONSTANTS
+const TInt KCapturePriority( 255 );
+const TUint KLongVoiceKey( 0x102818E7 ); // unique (UID of this exe)
+const TUid KVoiceUiUID = { 0x101F8543 };
+
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::NewL
+// ---------------------------------------------------------
+//
+CVCommandManagerVoiceKeyLauncher* CVCommandManagerVoiceKeyLauncher::NewL()
+    {
+    CVCommandManagerVoiceKeyLauncher* self = new (ELeave) CVCommandManagerVoiceKeyLauncher();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::CVCommandManagerVoiceKeyLauncher
+// C++ constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------
+//
+CVCommandManagerVoiceKeyLauncher::CVCommandManagerVoiceKeyLauncher()
+    : CActive( EPriorityStandard )
+    {
+    // nothing
+    }
+    
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::ConstructL
+// C++ constructor can NOT contain any code, that might leave.
+// ---------------------------------------------------------
+//
+void CVCommandManagerVoiceKeyLauncher::ConstructL() 
+    {
+    RUBY_DEBUG_BLOCK( "" );
+    
+    // Check if the voice key exist
+    iKeyEnabled = FeatureManager::FeatureSupported( KFeatureIdKeypadNoVoiceKey );
+    if ( iKeyEnabled )
+        {
+        User::LeaveIfError( iWsSession.Connect() );
+        
+        iWindowGroup = RWindowGroup ( iWsSession );
+        iWindowGroup.Construct( (TUint32) &iWindowGroup, EFalse );
+        
+        iWindowGroup.SetOrdinalPosition( -1 );
+        iWindowGroup.EnableReceiptOfFocus( EFalse );
+    
+        iKeyCaptureHandle = iWindowGroup.CaptureKey( EKeyDevice6, 0, 0 );
+        iLongKeyCaptureHandle = iWindowGroup.CaptureLongKey( (TUint)EKeyDevice6, 
+                                    KLongVoiceKey, 0, 0, KCapturePriority, ELongCaptureNormal );
+                                    
+        CApaWindowGroupName* name = CApaWindowGroupName::NewLC( iWsSession );
+        name->SetHidden( ETrue );
+        name->SetWindowGroupName( iWindowGroup );
+        CleanupStack::PopAndDestroy( name );
+                                    
+        iWsSession.EventReady( &iStatus );
+     
+        CActiveScheduler::Add( this );
+        SetActive();
+
+        }
+  
+    }
+    
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::~CVCommandManagerVoiceKeyLauncher
+// ---------------------------------------------------------
+//
+CVCommandManagerVoiceKeyLauncher::~CVCommandManagerVoiceKeyLauncher()
+    {
+    RUBY_DEBUG0( "START" );
+    if ( iKeyEnabled )
+        {        
+        Cancel();
+        iWindowGroup.Close();        
+        iWsSession.Close();        
+        }
+        
+    RUBY_DEBUG0( "EXIT" );
+    }
+    
+
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::DoCancel
+// ---------------------------------------------------------
+// 
+void CVCommandManagerVoiceKeyLauncher::DoCancel()
+    {
+    RUBY_DEBUG0( "START" );
+    
+    
+    if ( iKeyEnabled )
+        {
+        iWsSession.EventReadyCancel();
+        iWindowGroup.CancelCaptureKey( iKeyCaptureHandle );
+        iWindowGroup.CancelCaptureKey( iLongKeyCaptureHandle );       
+        }    
+    
+    RUBY_DEBUG0( "EXIT" );
+    }
+
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::RunL
+// ---------------------------------------------------------
+//     
+void CVCommandManagerVoiceKeyLauncher::RunL()
+    {
+    RUBY_DEBUG_BLOCK( "" );
+    
+    if ( iStatus.Int() == KErrNone )
+        {
+        TWsEvent event;
+        iWsSession.GetEvent( event );
+        
+        iWsSession.EventReady( &iStatus );
+        SetActive();
+        
+        if ( event.Key()->iCode == KLongVoiceKey )
+            {
+            //iWsSession.SendEventToOneWindowGroupsPerClient( event );
+            
+            LaunchVoiceUiL();
+            }
+        }
+    }
+
+    
+// ---------------------------------------------------------
+// CVCommandManagerVoiceKeyLauncher::LaunchVoiceUiL
+// ---------------------------------------------------------
+//     
+void CVCommandManagerVoiceKeyLauncher::LaunchVoiceUiL()
+    {
+    RUBY_DEBUG_BLOCK( "" );
+   
+    TApaTaskList apaTaskList( CCoeEnv::Static()->WsSession() );
+    TApaTask apaTask = apaTaskList.FindApp( KVoiceUiUID );
+    
+    if ( apaTask.Exists() )
+        {
+        apaTask.BringToForeground();
+        }
+    else
+        {
+        RApaLsSession apaLsSession;
+        User::LeaveIfError( apaLsSession.Connect() );
+        CleanupClosePushL(apaLsSession);
+        
+        TApaAppInfo appInfo;
+        User::LeaveIfError( apaLsSession.GetAppInfo( appInfo, KVoiceUiUID ) );
+        
+        TFileName appName = appInfo.iFullName;
+        CApaCommandLine* apaCommandLine = CApaCommandLine::NewLC();
+
+        apaCommandLine->SetExecutableNameL( appName );
+        apaCommandLine->SetCommandL( EApaCommandRunWithoutViews );
+        User::LeaveIfError ( apaLsSession.StartApp( *apaCommandLine ) );
+        CleanupStack::PopAndDestroy( apaCommandLine );
+    
+        CleanupStack::PopAndDestroy(&apaLsSession);
+        }    
+    }
+    
+//  End of File