diff -r 000000000000 -r 5f000ab63145 phoneapp/phoneuiutils/src/cphonekeys.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiutils/src/cphonekeys.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,228 @@ +/* +* Copyright (c) 2002 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: Phone Keys +* +*/ + + +// INCLUDE FILES +#include "cphonekeys.h" +#include +#include +#include "phonelogger.h" + +// CONSTANTS +_LIT( KPhoneValidChars, "0123456789*#+pwPW" ); + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CPhoneKeys::IsNumberKey +// --------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::IsNumberKey( + const TKeyEvent& aKeyEvent, + TEventCode /*aType*/ ) + { + // Convert key code to western. + TBuf<1> buffer; // one character + buffer.Append( aKeyEvent.iCode ); + AknTextUtils::ConvertDigitsTo( buffer, EDigitTypeWestern ); + + TBool result = EFalse; + + switch ( buffer[ 0 ] ) // first char + { + // Digits, 0 .. 9 + case KPhoneDtmf0Character: + case KPhoneDtmf1Character: + case KPhoneDtmf2Character: + case KPhoneDtmf3Character: + case KPhoneDtmf4Character: + case KPhoneDtmf5Character: + case KPhoneDtmf6Character: + case KPhoneDtmf7Character: + case KPhoneDtmf8Character: + case KPhoneDtmf9Character: + result = ETrue; + break; + default: + break; + } +__PHONELOG1( + EBasic, + EPhonePhoneapp, + "PhoneKeys::IsNumberKey: result: %d", + result ); + + return result; + } + +// --------------------------------------------------------- +// CPhoneKeys::IsNumericKey +// --------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::IsNumericKey( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + TBool result = IsNumberKey( aKeyEvent, aType ); + + if ( !result ) + { + switch( aKeyEvent.iCode ) + { + case KPhoneDtmfHashCharacter: // Hash + case KPhoneDtmfStarCharacter: // Asterisk + // the following key can be got via taps of * + case KPhoneDtmfSpeedDialCharacter: // Plus + case KPhoneDtmfPauseCharacter: // DTMF Soft-Pause character + case KPhoneDtmfWaitCharacter: // DTMF Wait character + result = ETrue; + break; + default: + break; + } + } + +__PHONELOG2( + EBasic, + EPhonePhoneapp, + "PhoneKeys::IsNumericKey: result: %d, code %d", + result, + aKeyEvent.iCode ); + + return result; + } + +// --------------------------------------------------------- +// CPhoneKeys::IsEscapeKey +// --------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::IsEscapeKey( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + return + ( aType == EEventKey ) && + ( aKeyEvent.iCode == EKeyEscape ); + } + +// --------------------------------------------------------- +// CPhoneKeys::IsDTMFTone +// --------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::IsDtmfTone( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + TBool result = IsNumberKey( aKeyEvent, aType ); + + if ( !result ) + { + switch( aKeyEvent.iCode ) + { + case KPhoneDtmfHashCharacter: // Hash + case KPhoneDtmfStarCharacter: // Asterisk + result = ETrue; + break; + default: + break; + } + } + +__PHONELOG2( + EBasic, + EPhonePhoneapp, + "PhoneKeys::IsDtmfTone: result: %d, code %d", + result, + aKeyEvent.iCode ); + + return result; + } + +// --------------------------------------------------------- +// CPhoneKeys::IsSecondHashKey +// Checks if keyevent is Second "#" key, i.e, "##". +// --------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::IsSecondHashKey( + const TDes& aText ) + { + TInt length = aText.Length(); + TBool result = EFalse; + + // * or # character entered + if ( ( length >= KSecondKeyEvent ) + && ( aText[0] == KPhoneDtmfHashCharacter ) + && ( aText[1] == KPhoneDtmfHashCharacter ) ) + { + result = ETrue; + } + + __PHONELOG1( + EBasic, + EPhonePhoneapp, + "PhoneKeys::IsSecondHashKey: result: %d", + result ); + + return result; + } + +// ----------------------------------------------------------------------------- +// PhoneKeys::IsExtraChar +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::IsExtraChar( + TInt aChar ) + { + TBool result = EFalse; + switch( aChar ) + { + case '*': // Asterisk + // the following key can be got via taps of * + case '+': // Plus + case 'p': // P character + case 'w': // W character + result = ETrue; + break; + default: + break; + } + + return result; + } + +// --------------------------------------------------------- +// CPhoneKeys::Validate +// +// Go through the whole string and validate each character. +// If character is invalid, check if we have reached end of +// string (in which case, input.Peek() returns 0). +// --------------------------------------------------------- +// +EXPORT_C TBool CPhoneKeys::Validate( const TDesC& aString ) + { + TLex input( aString ); + TPtrC valid( KPhoneValidChars ); + + while ( valid.Locate( input.Peek() ) != KErrNotFound ) + { + input.Inc(); + } + + return !input.Remainder().Length(); + } + +// End of File