diff -r 63339781d179 -r 09b1ac925e3f securitydialogs/lockapp/src/lockappkeypattern.cpp --- a/securitydialogs/lockapp/src/lockappkeypattern.cpp Thu Aug 19 10:45:23 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,281 +0,0 @@ -/* -* Copyright (c) 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: Key pattern matching component. - * -*/ - - -#include "lockapptrace.h" -#include "lockappkeypattern.h" - -const TInt KDefaultTimeout = 2000000; - -// --------------------------------------------------------------------------- -// Standard two-phased construction -// --------------------------------------------------------------------------- -CLockAppKeyPattern* CLockAppKeyPattern::NewL( ) - { - CLockAppKeyPattern *self = new ( ELeave ) CLockAppKeyPattern(); - CleanupStack::PushL( self ); - self->ConstructL( ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Default C++ constructor -// --------------------------------------------------------------------------- -CLockAppKeyPattern::CLockAppKeyPattern( ) : - iKeyTimeOut( KDefaultTimeout ), - iState( EPatternNoMatch ), - iEnabled ( ETrue ), - iHasPatterns( EFalse ) - { - // no implementation required - } - -// --------------------------------------------------------------------------- -// Key pattern construction -// --------------------------------------------------------------------------- -void CLockAppKeyPattern::ConstructL( ) - { - iKeyTimer = CPeriodic::NewL( CActive::EPriorityUserInput ); - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -CLockAppKeyPattern::~CLockAppKeyPattern( ) - { - ClearPatterns( ); - // timer between key presses is cancelled - if ( iKeyTimer ) - { - iKeyTimer->Cancel( ); - delete iKeyTimer; - } - } - -// --------------------------------------------------------------------------- -// Gets the enabled state. -// --------------------------------------------------------------------------- -TBool CLockAppKeyPattern::IsEnabled( ) - { - return iEnabled; - } - -// --------------------------------------------------------------------------- -// Sets the enabled state. -// --------------------------------------------------------------------------- -void CLockAppKeyPattern::SetEnabled(TBool aEnabled ) - { - iEnabled = aEnabled; - } - -// --------------------------------------------------------------------------- -// Gets the primary key timeout. -// --------------------------------------------------------------------------- -TUint CLockAppKeyPattern::GetKeyTimeOut( ) - { - return iKeyTimeOut; - } - -// --------------------------------------------------------------------------- -// Sets the primary key timeout. -// --------------------------------------------------------------------------- -void CLockAppKeyPattern::SetKeyTimeOut(TUint aTimeOut ) - { - iKeyTimeOut = aTimeOut; - } - -// --------------------------------------------------------------------------- -// Add new key combination -// --------------------------------------------------------------------------- -TInt CLockAppKeyPattern::AddPattern( TUint32 aPrimaryKey, TUint32 aSecondaryKey ) - { - TInt err(KErrNone); - iPrimaryKeys.Append( aPrimaryKey ); - iSecondaryKeys.Append( aSecondaryKey ); - iHasPatterns = ETrue; - return err; - } - -// --------------------------------------------------------------------------- -// Get key combination -// --------------------------------------------------------------------------- -TInt CLockAppKeyPattern::GetPattern(TInt aIndex, TUint32& aPrimaryKey, TUint32& aSecondaryKey ) - { - TInt err( KErrNone); - if ( iHasPatterns && aIndex < iPrimaryKeys.Count( )&& aIndex < iSecondaryKeys.Count( ) ) - { - aPrimaryKey = iPrimaryKeys[aIndex]; - aSecondaryKey = iSecondaryKeys[aIndex]; - } - else - { - err = KErrNotFound; - } - return err; - } - -// --------------------------------------------------------------------------- -// Returns true if the key pattern matcher has been initialized -// --------------------------------------------------------------------------- -TBool CLockAppKeyPattern::HasPatterns( ) - { - return (iHasPatterns && iPrimaryKeys.Count() > 0 && iSecondaryKeys.Count() > 0); - } - -// --------------------------------------------------------------------------- -// Clear all key combinations -// --------------------------------------------------------------------------- -TInt CLockAppKeyPattern::ClearPatterns( ) - { - TInt err( KErrNone); - if ( iHasPatterns ) - { - iPrimaryKeys.Reset( ); - iSecondaryKeys.Reset( ); - iWaitingKeys.Reset( ); - iHasPatterns = EFalse; - // cancel the timer - iKeyTimer->Cancel( ); - } - return err; - } - -// --------------------------------------------------------------------------- -// Receives keys and checks whether they match any primary+secondary key combination -// --------------------------------------------------------------------------- -TPatternState CLockAppKeyPattern::HandleKeyEvent( TUint32 aKey ) - { - if ( iEnabled ) - { - if ( iHasPatterns ) - { - switch (iState) - { - case EPatternNoMatch: - case EPatternSecondaryMatch: - { - if ( iPrimaryKeys.Find( aKey ) != KErrNotFound ) - { - HandlePrimaryKeyEvent( aKey ); - } - else - { - HandleOtherKeyEvent(); - } - } - break; - case EPatternPrimaryMatch: - { - if ( iWaitingKeys.Find( aKey ) != KErrNotFound ) - { - HandleSecondaryKeyEvent(); - } - else - { - if ( iPrimaryKeys.Find( aKey ) != KErrNotFound ) - { - HandlePrimaryKeyEvent( aKey ); - } - else - { - HandleOtherKeyEvent(); - } - } - } - break; - default: - break; - } - } - else - { - return EPatternNotInitialized; - } - } - else - { - return EPatternNotEnabled; - } - - return iState; - } - -// --------------------------------------------------------------------------- -// Handles primary key events -// --------------------------------------------------------------------------- -void CLockAppKeyPattern::HandlePrimaryKeyEvent( TUint32 aKey ) - { - // cancel the timer - iKeyTimer->Cancel( ); - // clear the waiting keys - iWaitingKeys.Reset( ); - // add those secondary keys to the waiting keys, which have the same primary key - for (TInt i( 0); i < iPrimaryKeys.Count( ); i++ ) - { - if ( iPrimaryKeys[i] == aKey && i < iSecondaryKeys.Count( ) ) - { - iWaitingKeys.Append( iSecondaryKeys[i] ); - } - } - - // start timer for primary key timeout - iKeyTimer->Start( iKeyTimeOut, iKeyTimeOut, TCallBack( HandleKeyTimerTimeout, this ) ); - - // set the state - iState = EPatternPrimaryMatch; - } - -// --------------------------------------------------------------------------- -// Handles secondary key events -// --------------------------------------------------------------------------- -void CLockAppKeyPattern::HandleSecondaryKeyEvent( ) - { - // cancel the timer - iKeyTimer->Cancel( ); - // clear the waiting keys - iWaitingKeys.Reset( ); - // set the state - iState = EPatternSecondaryMatch; - } - -// --------------------------------------------------------------------------- -// Handles other key events -// --------------------------------------------------------------------------- -void CLockAppKeyPattern::HandleOtherKeyEvent( ) - { - // cancel the timer - iKeyTimer->Cancel( ); - // clear the waiting keys - iWaitingKeys.Reset( ); - // set the state - iState = EPatternNoMatch; - } - -// --------------------------------------------------------------------------- -// A call back to the key pattern timer, the allowed time window for pressing -// the secondary key to get a match has passed. -// --------------------------------------------------------------------------- -TInt CLockAppKeyPattern::HandleKeyTimerTimeout( TAny* aSelf ) - { - CLockAppKeyPattern* self = reinterpret_cast< CLockAppKeyPattern* >( aSelf ); - // reset the state - self->HandleOtherKeyEvent( ); - return KErrNone; - } - -// End of file