phoneapp/phoneuiutils/src/cphonekeys.cpp
changeset 0 5f000ab63145
child 45 6b911d05207e
child 58 40a3f856b14d
--- /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    <aknkeys.h>
+#include    <AknUtils.h>
+#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