diff -r 000000000000 -r 79c6a41cd166 idlefw/plugins/wsplugin/src/sindlaunchhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlefw/plugins/wsplugin/src/sindlaunchhandler.cpp Thu Dec 17 08:54:17 2009 +0200 @@ -0,0 +1,146 @@ +/* +* Copyright (c) 2005-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: SIND app launch handler for Active Idle WS Plug-in. +* +*/ + + +#include "sindlaunchhandler.h" +#include "keyhandlertimer.h" +#include "uistate.h" +#include +#include +#include +#include + +//#define AI_ENABLE_RD_LOGGING +#define AI_RD_LOG_TO_DEBUG_OUTPUT + +#include "debug.h" + +namespace AiWsPlugin { + + +CSINDLaunchHandler::CSINDLaunchHandler() + { + } + +void CSINDLaunchHandler::ConstructL() + { + // Read capability: ReadDeviceData. + _LIT_SECURITY_POLICY_C1( KReadDevicePolicy, ECapabilityReadDeviceData ); + // Write capability: WriteDeviceData. + _LIT_SECURITY_POLICY_C1( KWriteDevicePolicy, ECapabilityWriteDeviceData ); + + // Initialize Shortcut Plug-in command API + RProperty::Define( + KUidSystemCategory, + KPSUidShortcutCmd, + RProperty::EText, + KReadDevicePolicy, + KWriteDevicePolicy + ); + + iTimer = CKeyHandlerTimer::NewL( this ); + + iSINDKeyDown = EFalse; + } + +CSINDLaunchHandler* CSINDLaunchHandler::NewLC() + { + CSINDLaunchHandler* self = new(ELeave) CSINDLaunchHandler; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CSINDLaunchHandler::~CSINDLaunchHandler() + { + delete iTimer; + } + +void CSINDLaunchHandler::SetUiStateQuery( MUiState& aUiState ) + { + iUiState = &aUiState; + } + +void CSINDLaunchHandler::FocusChanged( TBool /*aState*/ ) + { + // Focus status is queried from iUiState + } + +TBool CSINDLaunchHandler::OfferRawEvent(const TRawEvent& aRawEvent) + { + switch( aRawEvent.Type() ) + { + case TRawEvent::EKeyDown: + { + if ( iUiState->HasFocus() && aRawEvent.ScanCode() == EStdKeyDevice1 ) + { + __PRINTS( "XAI: CSINDLaunchHandler: SIND key down, start timer"); + const TTimeIntervalMicroSeconds32 KLongKeyPress(600000); + iTimer->Cancel(); + iTimer->After(KLongKeyPress); + iSINDLaunched = EFalse; + iSINDKeyDown = ETrue; + } + else if( iUiState->HasFocus() && iSINDKeyDown ) + { + __PRINTS( "XAI: CSINDLaunchHandler: SIND key down, other key pressed, cancel timer"); + iTimer->Cancel(); + SkipVoiceDial(); + } + break; + } + case TRawEvent::EKeyUp: + { + if ( iUiState->HasFocus() && aRawEvent.ScanCode() == EStdKeyDevice1 && !iSINDLaunched && iTimer->IsActive() ) + { + __PRINTS( "XAI: SIND key up, cancel timer"); + iTimer->Cancel(); + SkipVoiceDial(); + } + break; + } + } + return EFalse; + } + +void CSINDLaunchHandler::SkipVoiceDial() + { + __PRINTS( "XAI: CSINDLaunchHandler::SkipVoiceDial()"); + // Handle skip scenario only if voice dial ui hasn't been launched + if( !iSINDLaunched ) + { + RProperty::Set( + KUidSystemCategory, + KPSUidShortcutCmd, + KAiPSSkipNameDialer ); + } + iSINDKeyDown = EFalse; + } + +void CSINDLaunchHandler::TimerDone() + { + __PRINTS( "XAI: CSINDLaunchHandler::TimerDone()"); + __PRINTS( "XAI: Start Voice Dial UI"); + RProperty::Set( + KUidSystemCategory, + KPSUidShortcutCmd, + KAiPSLaunchNameDialer ); + iSINDLaunched = ETrue; + iSINDKeyDown = EFalse; + } + +} // namespace AiWsPlugin