fep/aknfep/src/AknFepUiInputStateQwerty.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
--- a/fep/aknfep/src/AknFepUiInputStateQwerty.cpp	Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1221 +0,0 @@
-/*
-* Copyright (c) 2004 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:           
-*       Provides the TAknFepInputStateQwerty methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include "AknFepUiInputStateQwerty.h"
-#include "AknFepUIManagerStateInterface.h"      //MAknFepUIManagerStateInterface
-#include "AknFepManagerUIInterface.h"           //MAknFepManagerUIInterface
-#include "AknFepCaseManager.h"
-#include "AknFepUiIndicInputManager.h"
-
-
-#include <PtiEngine.h>
-#include <PtiDefs.h>
-#include <PtiKeyMappings.h>
-#include <PtiDefs.h>        
-#include <centralrepository.h> 
-#include <AknFepInternalCRKeys.h>       
-#ifdef RD_HINDI_PHONETIC_INPUT	
-#include <PtiIndicDefs.h>       
-#endif
-const TInt KEventIndexForW = 3;
-const TInt KEventIndexForP = 2;
-const TInt KPtiCapitalEIndex = 19;
-const TInt KPtiStarIndex = 0;
-const TInt KPtiPlusIndex = 1;
-const TInt KPtiMinusIndex = 18;
-const TInt KPtiCommaIndex = 17;
-const TInt KPtiHashIndex = 4;
-const TInt KMaxOutputSizeForAKeyPress = 10;
-
-_LIT(KAknFepPlainNumbers, "1234567890");
-const TInt KNumAllowedIdleNumericChars = 22;    
-const TUint16 KAllAllowedNumericChars[] =
- 	{'*','+','p','w','#','1','2','3','4','5','6','7','8','9','0', ';','.',',','-','E','?','/'};
-const TKeyEvent KEventsForSecondPass[]  = 
-	{
-		{42, EStdKeyNkpAsterisk, 3, 0}, 
-    	{43, EStdKeyNkpPlus, 3, 0},
-        {112, 80, EModifierAutorepeatable, 0},
-        {119, 87, EModifierAutorepeatable, 0},                                           
-        {35, EStdKeyHash, EModifierAutorepeatable, 0},
-        {EPtiKey1, EPtiKey1, EModifierAutorepeatable, 0},
-        {EPtiKey2, EPtiKey2, EModifierAutorepeatable, 0},
-        {EPtiKey3, EPtiKey3, EModifierAutorepeatable, 0},
-        {EPtiKey4, EPtiKey4, EModifierAutorepeatable, 0},
-        {EPtiKey5, EPtiKey5, EModifierAutorepeatable, 0},
-        {EPtiKey6, EPtiKey6, EModifierAutorepeatable, 0},
-        {EPtiKey7, EPtiKey7, EModifierAutorepeatable, 0},
-        {EPtiKey8, EPtiKey8, EModifierAutorepeatable, 0},
-        {EPtiKey9, EPtiKey9, EModifierAutorepeatable, 0},
-        {EPtiKey0, EPtiKey0, EModifierAutorepeatable, 0},
-        {59,       EStdKeySemiColon, EModifierAutorepeatable, 0},        
-        {46,       122, EModifierAutorepeatable, 0},
-        {44,       121, EModifierAutorepeatable, 0},
-   		{45,       130, EModifierAutorepeatable, 0},
-   		{101,      69,  EModifierAutorepeatable|EModifierLeftShift, 0}, 
-   		{63,       EStdKeyForwardSlash, EModifierAutorepeatable|EModifierLeftShift, 0},
-        {47,       123, EModifierAutorepeatable, 0} 
-    };
-
-const TInt KFull_SimpleSymbolMapNumber = 8;
-const TUint16 KFull_SimpleSymbolMaps[KFull_SimpleSymbolMapNumber][2] = 
-      { {0xFF0A,'*'},{0xFF0B,'+'},{0xFF0D,'-'},{0xFF03,'#'},
-        {0xFF1B,';'},{0xFF0E,'.'},{0xFF0C,','},{0x3002, '.'}};
-
-const TInt KNumCharKeyExceptions = 14;
-const TUint16 CharKeyExceptions[] = {0x00f2, 0x00e0, 0x00e8, 0x00e9, 0x00e7, 0x00f9,
-                                     0x0161, 0x010d, 0x017e, 0x00fd, 0x00e1, 0x00ed,
-                                     0x00e9, 0x00ec};
-
-TAknFepInputStateQwerty::TAknFepInputStateQwerty(MAknFepUIManagerStateInterface* aOwner)
-    :TAknFepInputStateBase(aOwner)
-    {
-    iState = EInitial;
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-    // Predictive QWERTY (XT9) changes ---->
-    // The order of the following two commands has been swapped. This way the Xt9 core will keep its
-    // internal state while a dialog with no prediction is opened on top (like the "Edit word" query).
-    ptiengine->SetInputMode(EPtiEngineQwerty);
-    ptiengine->ClearCurrentWord();
-    // Predictive QWERTY (XT9) changes <----
-
-    MAknFepManagerUIInterface *fepMan = iOwner->FepMan();
-    TPtiKeyboardType keyLayout  = fepMan->KeyboardLayout();
-    ptiengine->SetKeyboardType(keyLayout);
-    if (keyLayout == EPtiKeyboardHalfQwerty)
-        {
-        ptiengine->SetInputMode(EPtiEngineHalfQwerty);        
-        }    
-#else 
-    ptiengine->ClearCurrentWord();
-    ptiengine->SetInputMode(EPtiEngineQwerty);
-#endif //RD_INTELLIGENT_TEXT_INPUT
-    }
-
-TBool TAknFepInputStateQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength)
-    {
-    TBool ret = EFalse;
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CAknFepFnKeyManager::TFnKeyState fnKeyState  = fepMan->FnKeyState();
-#endif
-    const TInt KDeleteKeyScanCode = 1;
-
-	if (aKey == KDeleteKeyScanCode 
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-	        || CAknFepFnKeyManager::EFnKeyNone != fnKeyState
-#endif
-	        ) 
-		{
-		// Pending dead key is handled as a special case.
-		if (ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting, NULL) == 1)
-			{
-			ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar, NULL);
-			return ETrue;
-			}			
-		if (iFakeDelete)
-			{
-			ptiengine->HandleCommandL(EPtiCommandClearVowelSeq, NULL);
-			ptiengine->HandleCommandL(EPtiCommandGetAndClearLastVietnameseChar, NULL);						
-			}
-		else
-			{
-			ptiengine->HandleCommandL(EPtiCommandResetVietnameseVowelSeqAndToneMark, NULL);										
-			}
-		}
-	else if (aKey == EPtiKeyQwertySpace
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-	         && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone)
-#endif
-	        )
-		{
-		// Space clears vietnamese vowels and tones.
-		ptiengine->HandleCommandL(EPtiCommandResetVietnameseVowelSeqAndToneMark, NULL);								
-		}
-	if( aLength == ELongKeyPress )
-		{
-		// the vowel seq tone mark of the short key press should be reset
-		ptiengine->HandleCommandL(EPtiCommandResetVietnameseVowelSeqAndToneMark, NULL);
-		}
-	iFakeDelete = EFalse;	
-	iCharKeyException = EFalse;		
-	
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-	CPtiCoreLanguage* langCur = static_cast<CPtiCoreLanguage*>(ptiengine->CurrentLanguage());	
-	TBool chinese = EFalse;
-	if(langCur->LanguageCode()==ELangPrcChinese ||
-	        langCur->LanguageCode()==ELangHongKongChinese ||
-	        langCur->LanguageCode()==ELangTaiwanChinese )
-	    {
-	    chinese = ETrue;
-	    }
-    if (chinese && fepMan->IsOnlyNumericPermitted())
-        {
-        ptiengine->ActivateLanguageL(ELangEnglish);
-        ptiengine->SetInputMode(EPtiEngineQwerty);
-        ptiengine->SetKeyboardType( iOwner->FepMan()->KeyboardLayout());
-        }
-    const TBool isQwertyKey = ptiengine->IsValidKey((TPtiKey)aKey);
-#else	
-	const TBool isQwertyKey = IsQwertyKey(aKey);
-#endif	
-
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-    if (aKey == EStdKeyEnter)
-		{
-		fepMan->SimulateKeyEventL(EKeyF19); // Asynchronous case update.
-		}
-#endif	
-    
-    if ( !isQwertyKey )
-        {
-        return EFalse;
-        }
-#ifndef RD_INTELLIGENT_TEXT_INPUT
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-#endif
-    CAknFepCaseManager* caseMan = iOwner->CaseMan(); 
-
-    fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress);
-    
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-#ifdef __REVERSE_FN_KEY_SUPPORTED
-	//Reverse Fn key mapping needs to be checked.
-	if ( fepMan->IsOnlyNumericPermitted() && !fepMan->IsReverseFnkeyInput())    
-#else
-	if ( fepMan->IsOnlyNumericPermitted() )    
-#endif //__REVERSE_FN_KEY_SUPPORTED
-		{
-		if ((fnKeyState == CAknFepFnKeyManager::EFnKeyNone) && 
-		    (aKey == EStdKeySpace || aKey == EStdKeyEnter))
-#else
-	if ( fepMan->IsOnlyNumericPermitted() )    
-		{ 
-		if (aKey == EStdKeyEnter)
-			{
-			return EFalse;
-			}
-		if (aKey == EStdKeySpace)
-#endif
-			{
-			return ETrue;
-			}
-		
-		return CheckForValidNumberEntryForqwerty(aKey);
-		}    
-    
-    if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) &&
-        iData && (iData != aKey) )
-        {
-        // Chr key is still pressed down but character key was changed from previous one
-        // to new one. The previous character is committed to the editor and we continue 
-        // prosessing new key.
-        fepMan->CommitInlineEditL();
-        ptiengine->ClearCurrentWord();
-        iData = 0;
-        caseMan->UpdateCase(ENullNaviEvent); 
-        }
-
-    TBool isCharacter = ETrue;
-    if (!iData)
-        {
-        isCharacter = IsCharacterKey(aKey);
-        }
-
-	HandleCaseChange(aKey, isCharacter);
-	    
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-#ifdef __REVERSE_FN_KEY_SUPPORTED
-	
-	TInt origLanguage = ptiengine->CurrentLanguage()->LanguageCode();
-	TPtiEngineInputMode origInputMode = ptiengine->InputMode();
-	TBool languageChanged = EFalse;
-    // In reverse fn key mapping filter the char applicable for
-    // Numeric editor.
-    if( fepMan->IsOnlyNumericPermitted() &&  fepMan->IsReverseFnkeyInput())
-        {
-        if( !fepMan->IsValidCharForNumericInFnReverseL(aKey, iOwner->PtiEngine()->Case()) )
-            {
-             TChar chr;
-
-            if( ! TryGetValidCharForKey(aKey, chr) )
-                {
-                // If the key in not valid char in the current input language in Fn reverse mode,
-                // then we will check if against English language. And if its valid then we will
-                // insert the char based out of key for English input language and revert back 
-                // the change in input language at the end.
-
-                if(ptiengine->CurrentLanguage()->LanguageCode() == ELangEnglish)
-                    {
-                    return ETrue;
-                    }
-
-                languageChanged = ETrue;
-                ptiengine->ActivateLanguageL(ELangEnglish);
-       		    ptiengine->SetInputMode(EPtiEngineQwerty);            		
-
-                if( !fepMan->IsValidCharForNumericInFnReverseL(aKey, iOwner->PtiEngine()->Case()) )
-                    {
-                    if( ! TryGetValidCharForKey(aKey, chr) )
-	                    {
-	                    ptiengine->ActivateLanguageL(origLanguage);
-    	                ptiengine->SetInputMode(origInputMode );  
-	
-    	                return ETrue;
-    	                }
-    	            else
-    	            	{
-    	            	if(languageChanged)
-    	            		{
-        	        		ptiengine->ActivateLanguageL(origLanguage);
-            	    		ptiengine->SetInputMode(origInputMode );            		
-                			}
-
-	            		TBuf<1> buf;    
-	    	        	buf.Append(chr);
-    	    	    	fepMan->NewCharacterL(buf);
-        	    		fepMan->CommitInlineEditL();      
-	        	    	ptiengine->ClearCurrentWord();                
-    	        		iData = 0;
-        	    		ptiengine->CancelTimerActivity();
-            			return ETrue;    	                
-    	            	}
-                    }
-                }
-			else
-            	{
-	            if(languageChanged)
-    	            {
-        	        ptiengine->ActivateLanguageL(origLanguage);
-            	    ptiengine->SetInputMode(origInputMode );            		
-                	}
-
-	            TBuf<1> buf;    
-    	        buf.Append(chr);
-        	    fepMan->NewCharacterL(buf);
-            	fepMan->CommitInlineEditL();      
-	            ptiengine->ClearCurrentWord();                
-    	        iData = 0;
-        	    ptiengine->CancelTimerActivity();
-            	return ETrue;
-            	}
-            }
-        }
-    
-#endif //__REVERSE_FN_KEY_SUPPORTED
-#endif //RD_INTELLIGENT_TEXT_INPUT
-
-    iData = aKey;
-
-    TBool keyEventHandledByFep = ETrue;
-    TInt languageCode = 0;
-    MPtiLanguage* curlang = ptiengine->CurrentLanguage();
-    if (curlang)
-        {
-        languageCode = curlang->LanguageCode();
-        }
-
-   TBuf<KMaxOutputSizeForAKeyPress> filtered;   
-    if ( keyEventHandledByFep &&
-        (isCharacter || isQwertyKey) )
-        {        
-        TPtrC text;
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__
-        TBool fnCaseActive = (ptiengine->Case()==EPtiCaseFnLower || ptiengine->Case()==EPtiCaseFnUpper);
-        if (aKey == EStdKeySpace && !fnCaseActive /*(fnKeyState == CAknFepFnKeyManager::EFnKeyNone)*/)
-
-#else
-        if (aKey == EStdKeySpace && (fnKeyState == CAknFepFnKeyManager::EFnKeyNone))
-#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__       
-#else 
-        if (aKey == EStdKeySpace)
-#endif
-            {
-            // PtiEngine does not have mapping for the space key.
-            TUint16 deadRoot = ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar);
-            if (deadRoot)
-            	{
-            	// There was a dead key press waiting. Space will cancel it and
-            	// insert the root char.
-            	TBuf<1> dbuf;
-            	dbuf.Append(deadRoot);
-            	text.Set(dbuf);
-            	}
-            else
-            	{
-                _LIT(KSpaceCharacter, " ");
-            	text.Set(KSpaceCharacter);
-            	}
-            }
-        else if (aKey == EStdKeyEnter)
-            {
-            // PtiEngine does not have mapping for the enter key.
-            const TText KAknFEPLineFeedSymbol = 0x21B2;
-            TBuf<1> lineFeed;
-            lineFeed.Zero();
-            lineFeed.Append(KAknFEPLineFeedSymbol);
-            text.Set(lineFeed);
-            }
-        else
-            {
-            TPtiTextCase CurCase = ptiengine->Case();
-            if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())
-                {
-                if(CheckForValidNumberEntryForqwerty(aKey))
-                    ptiengine->SetCase((TPtiTextCase)EPtiCaseFnLower);
-                else
-                    ptiengine->SetCase((TPtiTextCase)EPtiCaseLower);
-                } 
-            // Get keymapping from PtiEngine.                
-            text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey));
-            // Handle all exception cases.
-            CustomFilter(text, filtered, languageCode, caseMan->CurrentCase(), 
-                    ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| 
-                      fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress)));                        
-            text.Set(filtered);
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-			SetShortKeyPressText(text);
-            if( text.Length() == 0 ) // no mapping available
-                {
-                if( ( EStdKeySpace == aKey || EKeySpace == aKey ))
-                    {
-					// Launching the Edit menu on press of Fn key and space
-					if(fnKeyState == CAknFepFnKeyManager::EFnKeyDown)
-						fepMan->LaunchSelectModeMenuL();
-					else
-						{
-						// Editor should insert space when function key is in 
-						// locked state and space key is pressed.
-						_LIT(KSpaceCharacter, " ");
-            			text.Set(KSpaceCharacter);
-						}
-					}
-                }
-#endif
-            if(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())
-                ptiengine->SetCase(CurCase);
-            }
-        
-        TBuf<5> replacedText;
-        if (text.Length())
-            {
-            MPtiLanguage* lang = ptiengine->CurrentLanguage();
-            if (lang->LanguageCode() == ELangVietnamese)
-            	{
-            	 if (ptiengine->HandleCommandL(EPtiCommandGetAndClearVowelSequence, NULL) > 0)
-            	 	{
-            	 	// This key press produced Vietnamese vowel sequence.
-            	 	// Delete previous char, it will be replaced with accented char.
-            	 	// This is done by sending delete event before accented character is
-            	 	// added to buffer.
-            	 	TInt lastChar = ptiengine->HandleCommandL(EPtiCommandGetAndClearLastVietnameseChar,
-            	 	                                          NULL);
-            	 	iFakeDelete = ETrue;            	 	
-            	 	TKeyEvent delKey = {8, EStdKeyBackspace, 1, 0};        
-        	 		CCoeEnv::Static()->SimulateKeyEventL(delKey, EEventKey);				 		
-        	 		// Restore last char.
-					ptiengine->HandleCommandL(EPtiCommandSetVietnameseLastChar, (TAny*)lastChar);        	 		
-            	 	}  
-            	 else 
-            	 	{            	 
-            	 	TUint16 replaced = ptiengine->HandleCommandL(EPtiCommandQueryReplacePrevious, NULL);
-            	 	if (replaced)            	 	
-            	 		{
-            	 		// Remember last key press, since delete will destroy it.
-						TInt last = ptiengine->HandleCommandL(EPtiCommandGetVietnameseLastKey, NULL);            	 		
-    					if(!fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))
-    					    iFakeDelete = ETrue;
- 						TKeyEvent delKey = {8, EStdKeyBackspace, 1, 0};        
-        	 			CCoeEnv::Static()->SimulateKeyEventL(delKey, EEventKey);  
-        	 			replacedText.Append(replaced);
-        	 			replacedText.Append(text);
-        	 			text.Set(replacedText);   	       	 			
-        	 			// Restore last key.
-        	 			ptiengine->HandleCommandL(EPtiCommandSetLastKeyForVietnamese, (TAny*)last);
-            	 		}            	 	
-            	 	}            	
-            	}
-            
-            // Because of dead key functionality there may be several characters waiting.
-            TBuf<1> chr;            
-            for (TInt jj = 0; jj < text.Length(); jj++)
-              	{
-              	chr.Zero();
-               	chr.Append(text[jj]);
-	            fepMan->NewCharacterL(chr);               	         	                        
-            	if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ||
-            	     (ELongKeyPress == aLength) )
-            	    {
-               		// Commit the character if chr key is not pressed.
-               	    fepMan->CommitInlineEditL();
-               	    ptiengine->ClearCurrentWord();
-               	    iData = 0;
-                	}
-            	else
-                   {
-                   fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress);
-                   }
-              	}
-            ret = ETrue;
-            }
-        else
-            {
-            if (ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting, NULL) == 1)
-            {
-            if (caseMan->CurrentCase() == EAknEditorTextCase
-             || caseMan->CurrentCase() == EAknEditorUpperCase)
-            	{
-            	ptiengine->SetCase(EPtiCaseUpper);	            	
-            	}            
-            else if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) || 
-                    fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress))
-            	{
-            	ptiengine->SetCase(EPtiCaseLower);	
-            	}
-           	}
-#ifdef RD_INTELLIGENT_TEXT_INPUT           	
-           	else
-           	    {
-                fepMan->SimulateKeyEventL(EKeyF19); 
-           	    }
-#endif            	
-            ret = ETrue;
-            }
-        }
-    
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-#ifdef __REVERSE_FN_KEY_SUPPORTED
-	
-    if(languageChanged)
-        {
-       	ptiengine->ActivateLanguageL(origLanguage);
-     	ptiengine->SetInputMode(origInputMode );            		
-        }
-    
-#endif //__REVERSE_FN_KEY_SUPPORTED
-#endif //RD_INTELLIGENT_TEXT_INPUT    
-
-    return ret;
-    }
-
-// Functions from MPtiObserver interface
-void TAknFepInputStateQwerty::KeyTimerExpired()
-    {
-    if (iData)
-        {
-        MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-        TRAP_IGNORE(fepMan->CommitInlineEditL())
-        //do something if error??
-
-        CPtiEngine* ptiengine = iOwner->PtiEngine();
-        ptiengine->ClearCurrentWord();
-
-        CAknFepCaseManager* caseMan = iOwner->CaseMan(); 
-        caseMan->UpdateCase(ENullNaviEvent); 
-
-        iData = 0;
-        }
-    }
-
-
-
-TBool TAknFepInputStateQwerty::IsExceptionChar(TUint16 aChar)
-	{
-    for (TInt i = 0; i < KNumCharKeyExceptions; i++)
-      	{
-       	if (CharKeyExceptions[i] == aChar)	
-       		{ 		
-       		return ETrue;
-       		}
-   		} 	
-	
-	return EFalse;		
-	}
-
-
-TBool TAknFepInputStateQwerty::IsCharacterKey(const TInt aKey)
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    // Max length doesn't matter because we'll need only the first character.    
-    TBuf<KMaxName> lowerdata;   
-    
-    ptiengine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower);        
-    if (lowerdata.Length() > 0)
-    	{
-        TChar lower = lowerdata[0];
-        
-        if (IsExceptionChar(lower))
-       	    {
-       	    TBuf<KMaxName> upperdata; 
-			ptiengine->MappingDataForKey((TPtiKey)aKey, upperdata, EPtiCaseUpper);                   	    
-			if (upperdata.Length() > 0)
-				{
-				TChar upperchr = upperdata[0];
-				upperchr.LowerCase();
-				if (upperchr != lower)
-					{
-		        	iCharKeyException = ETrue;       		
-	    	    	return EFalse;        													
-					}								
-				}       	    
-       		} 
-        
-    	TUint upper = lower.GetUpperCase();
-    
-	    if ( TUint(lower) != upper )
-    	    {
-   			return ETrue; 	
-       		}
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-	    //Characters from languages without case changes like Arabic/Urdu 
-	    //cannot be identified with above logic. Hence, a special check below:
-	    else if ( IsLanguageWithoutCaseChanges() && fepMan->IsOnlyNumericPermitted() && lower.IsAlpha() )
-	        {
-	        return ETrue;
-	        }
-#endif
-     	}
-    
-    return EFalse;
-    }
-
-TBool TAknFepInputStateQwerty::IsNumberKey(const TInt aKey)
-    {
-    TBool response = EFalse;
-    if (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9)
-        {
-        response = ETrue;
-        }
-    return response;
-    }
-
-TBool TAknFepInputStateQwerty::IsQwertyKey(const TInt aKey)
-    {
-    TBool response = EFalse;
-    if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ) ||
-        IsNumberKey( aKey ) ||
-        aKey == EStdKeySpace ||
-        aKey == EStdKeyEnter ||
-        aKey == EPtiKeyQwertyPlus ||
-        aKey == EPtiKeyQwertyMinus ||
-        aKey == EPtiKeyQwertyComma ||
-        aKey == EPtiKeyQwertySemicolon ||
-        aKey == EPtiKeyQwertyFullstop ||
-        aKey == EPtiKeyQwertyHash ||
-        aKey == EPtiKeyQwertySlash ||
-        aKey == EPtiKeyQwertyApostrophe
-#ifdef RD_INTELLIGENT_TEXT_INPUT        
-        || aKey == EPtiKeyQwertyAtCharacter
-#endif 
-        )
-        {
-        response = ETrue;
-        }
-    return response;
-    }
-
-
-
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-TBool TAknFepInputStateQwerty::IsCharacterNumber(TChar aChar)
-    {
-    TBool isNumber;
-    isNumber =     (iOwner->NumberModeKeyMapping().Locate(aChar) != KErrNotFound) || 
-        (KAknFepPlainNumbers().Locate(aChar) != KErrNotFound) || 
-        iOwner->FepMan()->IsAllowedKeymappingForNumberMode(aChar);
-    return isNumber;
-    }
-#endif
-        
-void TAknFepInputStateQwerty::NumericCharacterForQwertyKey(TInt aInScanCode,
-                                                           TKeyEvent& aEvent,
-                                                           TBool aShifted, TChar& aResult)
-	{  
- 	CPtiEngine* ptiengine = iOwner->PtiEngine();	
-#ifdef RD_INTELLIGENT_TEXT_INPUT
- 	MAknFepManagerUIInterface *fepMan = iOwner->FepMan();			
-#endif
-	aResult = 0;
-	TUint16 firstChar;
-	
-	const TInt KMaxNumCharsPerCase = 50;
-	TBuf<KMaxNumCharsPerCase> keys;	
-	TInt langCode = 0;
-	
-	CPtiCoreLanguage* lang = static_cast<CPtiCoreLanguage*>(ptiengine->CurrentLanguage());		
-	if (lang)
-		{
-		langCode = lang->LanguageCode();
-		if (langCode == ELangFarsi || langCode == ELangUrdu || langCode == ELangHindi 
-		 || langCode == ELangPrcChinese || langCode == ELangHongKongChinese 
-		 || langCode == ELangTaiwanChinese || langCode == ELangArabic
-		 || TAknFepUiIndicInputManager :: IsIndicLangauge((TLanguage) langCode )
-#ifdef RD_HINDI_PHONETIC_INPUT	
-		 || TAknFepUiIndicInputManager :: IsIndicPhoneticLanguage( (TLanguage)langCode )
-#endif
-		)
-			{
-			lang = static_cast<CPtiCoreLanguage*>(ptiengine->GetLanguage(ELangEnglish));			
-			}				
-		}
-	
-	if (lang)
-		{
-		
-		// If the key have scancode EPtiKeyQwertyW, EPtiKeyQwertyP map to any valid
-		// numeric character that valid numeric character never be inserted.
-		// Earlier this was not happening, because key map with numeric key always
-
-		
-		CPtiQwertyKeyMappings* maps = static_cast<CPtiQwertyKeyMappings*>(lang->GetQwertyKeymappings());
-        TBool keyNotMapToNumeric(ETrue);
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-        if(maps)
-            {
-            maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseFnLower);
-            keyNotMapToNumeric = !(keys.Length() && IsCharacterNumber(keys[0]));
-            }
-#endif
-		
-		if (keyNotMapToNumeric && langCode == ELangVietnamese && aInScanCode == EPtiKeyQwertyW &&
-			!aShifted)
-			{
-			// This is handled as a special case because 'w' is normally produced by double press
-			// of w-key in Vitenamese but in number mode that can't be done.
-			aResult = 'w';
-			aEvent = KEventsForSecondPass[KEventIndexForW];
-			return;
-			}
-			
-		if (langCode == ELangHindi 
-#ifdef RD_MARATHI
-		|| langCode == ELangMarathi
-#endif // RD_MARATHI
-		    )
-			{
-			if (aInScanCode == EPtiKeyQwertyPlus && aShifted)
-				{
-				aResult = '-';
-				aEvent = KEventsForSecondPass[KPtiMinusIndex];
-				return;													
-				}
-			else if (aInScanCode == EPtiKeyQwertyMinus && !aShifted)
-				{
-				return;
-				}				
-			}
-			
-		if (langCode == ELangArabic)
-			{				
-			if (aInScanCode == EPtiKeyQwertyComma && !aShifted)			
-				{
-				aResult = ',';
-				aEvent = KEventsForSecondPass[KPtiCommaIndex];
-				return;					
-				}				
-			else if (aInScanCode == EPtiKeyQwertyE && aShifted)	
-				{				
-				aResult = 'E';
-				aEvent = KEventsForSecondPass[KPtiCapitalEIndex];
-				return;									
-				}				
-			}
-			
-		if (langCode == ELangFarsi)	
-			{
-			// Farsi uses english numeric keymappings with following exceptions.
-			if ((aInScanCode == EPtiKeyQwertyPlus && !aShifted) ||
-			    (aInScanCode == EPtiKeyQwertyComma && !aShifted))
-				{
-				return;   // Block
-				}
-			
-			if (aInScanCode == EPtiKeyQwerty7 && aShifted)
-				{
-				aResult = '*';
-				aEvent = KEventsForSecondPass[KPtiStarIndex];
-				return;					
-				}
-			if (aInScanCode == EPtiKeyQwerty8 && aShifted)
-				{
-				aResult = '-';
-				aEvent = KEventsForSecondPass[KPtiMinusIndex];
-				return;					
-				}				
-			if (aInScanCode == EPtiKeyQwerty9 && aShifted)
-				{
-				aResult = '+';
-				aEvent = KEventsForSecondPass[KPtiPlusIndex];
-				return;									
-				}				
-			if (aInScanCode == EPtiKeyQwerty2 && aShifted)
-				{
-				aResult = ',';
-				aEvent = KEventsForSecondPass[KPtiCommaIndex];
-				return;									
-				}								
-			}
-		else if (langCode == ELangUrdu)	
-			{
-			// urdu uses english numeric keymappings with following exceptions.	
-			if (aInScanCode == EPtiKeyQwerty0 && aShifted)
-				{
-				aResult = '+';
-				aEvent = KEventsForSecondPass[KPtiPlusIndex];
-				return;					
-				}			
-			if (aInScanCode == EPtiKeyQwerty3 && aShifted)
-				{
-				aResult = '#';
-				aEvent = KEventsForSecondPass[KPtiHashIndex];
-				return;					
-				}			
-			if (aInScanCode == EPtiKeyQwertyP)
-				{
-				if (iOwner->NumberModeKeyMapping().Locate('p') == KErrNotFound)
-					{
-					if (!aShifted)
-						{
-						aResult = '-';
-						aEvent = KEventsForSecondPass[KPtiMinusIndex];
-						return;											
-						}
-					else
-						{											
-						return;																	
-						}
-					}
-				else
-					{
-					if (aShifted)
-						{
-						aResult = '-';
-						aEvent = KEventsForSecondPass[KPtiMinusIndex];
-						return;															
-						}
-					else
-						{
-						aResult = 'p';
-						aEvent = KEventsForSecondPass[KEventIndexForP];
-						return;					
-						
-						}					
-					}									
-				}							
-			}
-		
-		// Handle other languages, which don't have 'p' and 'w' in normal keymapping data.		
-		
-        if( keyNotMapToNumeric &&
-		    (langCode == ELangGreek || langCode == ELangRussian ||
-		    langCode == ELangArabic || langCode == ELangHebrew || 
-		    langCode == ELangBulgarian || langCode == ELangThai ||
-		    langCode == ELangUkrainian) && !aShifted)	
-		   {
-		   if (aInScanCode == EPtiKeyQwertyW)
-		   	   {
-		   	   aResult = 'w';
-			   aEvent = KEventsForSecondPass[KEventIndexForW];
-			   return;
-		   	   }
-		   else if (aInScanCode == EPtiKeyQwertyP)
-		       {
-	   	   	   aResult = 'p';
-			   aEvent = KEventsForSecondPass[KEventIndexForP];
-			   return;		   		
-		   	   }		   		   
-		   }
-							
-
-		if (maps)
-			{
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-            if(aShifted)
-                {
-                maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseUpper);
-                }
-            else
-                {            
-                maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseFnLower);
-                if( !(keys.Length() && IsCharacterNumber(keys[0])))
-                    maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseFnUpper);
-                if( !(keys.Length() && IsCharacterNumber(keys[0])))
-                    maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseLower);
-                if( !(keys.Length() && IsCharacterNumber(keys[0])))
-                    maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseUpper);                
-                if( !(keys.Length() && IsCharacterNumber(keys[0])))
-                    keys.SetLength(0);
-                }
-                          
-#else 
-			if (aShifted)
-				{
-				maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseUpper);				
-				}
-			else
-				{
-				maps->GetDataForKey((TPtiKey)aInScanCode, keys, EPtiCaseLower);				
-				}
-#endif
-			if ( keys.Length() > 0 )
-			    {
-        		switch (keys[0])		
-        			{
-        			case KPtiPinyinMarker:
-        			case KPtiStrokeMarker:
-        			case KPtiZhuyinMarker:
-        			case KPtiCangjieMarker:
-					case KPtiGetAllMarker:        			
-        			     if (keys.Length() > 1)
-        			        firstChar = keys[1];
-        			     else
-        			        firstChar = 0;
-        			     break;
-        			default:			     
-        				 firstChar =  keys[0];			     
-        			}
-        						
-                for (TInt j = 0; j < KFull_SimpleSymbolMapNumber; j++)
-                    {
-                    if (firstChar == KFull_SimpleSymbolMaps[j][0])
-                        {
-                        firstChar = KFull_SimpleSymbolMaps[j][1];
-                        break;
-                        }             
-                    }  
-                    										
-			for (TInt i = 0; i < KNumAllowedIdleNumericChars; i++)
-				{			
-				if (firstChar == KAllAllowedNumericChars[i])								
-					{
-					aEvent = KEventsForSecondPass[i];
-					aResult = KAllAllowedNumericChars[i];																					
-					break;						
-						}									
-					}						
-			    }			    
-			}
-		}			
-	}    
-        
-           
-    
-void TAknFepInputStateQwerty::CustomFilter(TPtrC aInput, TDes& aOutput, TInt /*aLanguage*/, 
-                                           TInt aCurrentCase, TBool /*aShiftDown*/)
-    {   
-    aOutput.Zero();
-    
-    if (aInput.Length() && aInput.Length() <= aOutput.MaxLength())
-        {
-        aOutput.Copy(aInput);       
-        }
-
-    if (aOutput.Length())       
-        {      
-        if (aCurrentCase == EAknEditorTextCase || aCurrentCase == EAknEditorUpperCase)
-            {                                  
-            if (iCharKeyException && IsExceptionChar(aOutput[0]))
-            	{           
-            	TChar chr = aOutput[0];
-            	chr.UpperCase();
-            	aOutput[0] = chr;            	
-            	}
-#ifndef RD_INTELLIGENT_TEXT_INPUT
-            else if (aLanguage == ELangCzech)	
-            	{
-            	if (aOutput[0] == '/' && !aShiftDown)
-            		{
-            		aOutput[0] = 0x00c4;
-            		}				   			            		            		            	            	
-            	}                                                  
-#endif // RD_INTELLIGENT_TEXT_INPUT
-            }
-        }       
-    }
-    
-void TAknFepInputStateQwerty::HandleCaseChange(TInt aKey, TBool aIsCharacter)
-	{
-    TPtiTextCase caseMode = EPtiCaseLower;
-
-    if (aIsCharacter)
-        {
-        if( !( iOwner->FepMan()->IsOnlyNumericPermitted() && !IsNumberKey(aKey) ) )
-        	{
-        	switch(iOwner->CaseMan()->CurrentCase())
-           		{
-            	case EAknEditorLowerCase:
-                	caseMode = EPtiCaseLower;
-	                break;            
-    	        case EAknEditorTextCase:
-        	    case EAknEditorUpperCase:
-            	   caseMode = EPtiCaseUpper;
-	            default:
-    	           break;
-        	    }
-        	}
-        else
-        	{
-        	caseMode = iOwner->PtiEngine()->Case();
-        	}
-       	}
- 
-    TPtiTextCase shiftedCase = caseMode;
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-    
-    // If Fn key state is EFnKeyNone, Synchronise PtiEngine Textcase 
-    if( CAknFepFnKeyManager::EFnKeyNone == iOwner->FepMan()->FnKeyState() )
-        {
-        iOwner->PtiEngine()->SetCase((TPtiTextCase)EPtiCaseLower);
-        }
-    else
-        {
-        if( (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)||
-             iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) ))
-            {
-            iOwner->PtiEngine()->SetCase((TPtiTextCase)EPtiCaseFnUpper);
-            }        
-            
-        TPtiTextCase curCase = iOwner->PtiEngine()->Case();
-        if( EPtiCaseFnUpper  == curCase || EPtiCaseFnLower  == curCase )
-    	    {    	    
-    		if( EPtiCaseFnUpper == curCase )
-    			{
-    	    	TBuf<32> keyMappings;
-    	    	iOwner->PtiEngine()->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnUpper);
-    			
-    			if( keyMappings.Length() == 0)	
-    				{
-    		    	iOwner->PtiEngine()->SetCase((TPtiTextCase)EPtiCaseFnLower);
-    				}
-    			}    	    
-    	    return;	      	
-    	    }
-        }
-#endif
-    if ( (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)||
-          iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) )&& 
-       ( !aIsCharacter || iOwner->CaseMan()->IsAbleChangeCase() ) )
-        {
-        // Case mode is changed to opposite because shift key is/was pressed and
-        // in case of character key case changes are allowed. In case of
-        // number or special key, shift mode is used always when 
-        // shift key is pressed
-        switch ( caseMode )
-            {
-            case EPtiCaseUpper:
-                shiftedCase = EPtiCaseLower;
-                break;
-            case EPtiCaseLower:
-                shiftedCase = EPtiCaseUpper;
-                break;
-            default:
-                break;
-            }
-        }
-    
-    if ( iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) )
-        {
-        // Chr key is pressed down. Chr mode is used.
-        if (shiftedCase == EPtiCaseLower)
-            {
-            shiftedCase = EPtiCaseChrLower;
-            }
-        else if (shiftedCase == EPtiCaseUpper)
-            {
-            shiftedCase = EPtiCaseChrUpper;
-            }
-        }
-    
-    iOwner->PtiEngine()->SetCase(shiftedCase);
-	
-	}
-
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-TBool TAknFepInputStateQwerty::TryGetValidCharForKey(const TInt& aKey, TChar& aChar)
-    {    
-    if( ! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseLower) )
-        {
-        if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseUpper))
-            {
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-            //Do not check for FnUpper and FnLower case for Greek/Cyrillic/Hebrew script.
-            //This is for handling special characters in numeric editors.
-            if ( IsSpecialNonLatinScript() )
-                {
-                return EFalse;
-                }
-#endif
-            if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseFnLower))
-                {
-                if(! TryGetValidCharForKeyAndCase( aKey, aChar, EPtiCaseFnUpper))
-                	{
-                	return EFalse;	
-                	}
-                }
-            }
-        }
-    return ETrue;
-    }
-    
-TBool TAknFepInputStateQwerty::TryGetValidCharForKeyAndCase(const TInt& aKey, TChar& aChar, TPtiTextCase aCase)
-    {
-    TBuf<KMaxName> mappedCharacters;
-
-    iOwner->PtiEngine()->MappingDataForKey((TPtiKey)aKey, mappedCharacters, aCase);        
-    for (TInt i = 0; i < mappedCharacters.Length(); i++ )
-        {
-        if( iOwner->FepMan()->IsValidCharInNumericEditorL( mappedCharacters[i] ) )
-            {
-            aChar = mappedCharacters[i];
-            return ETrue;
-            }
-        }    
-    return EFalse;
-    }	
-
-TBool TAknFepInputStateQwerty::IsLanguageWithoutCaseChanges()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    TInt currLanguageCode = ptiengine->CurrentLanguage()->LanguageCode();
-    //update below list as and when required.
-    if (    ELangArabic == currLanguageCode ||
-            ELangFarsi == currLanguageCode ||
-            ELangHebrew == currLanguageCode ||
-            ELangHindi == currLanguageCode ||
-            ELangUrdu == currLanguageCode
-        )
-        {
-        return ETrue;
-        }
-    return EFalse;        
-    }
-
-TBool TAknFepInputStateQwerty::IsSpecialNonLatinScript()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    TInt currLanguageCode = ptiengine->CurrentLanguage()->LanguageCode();
-    //update below list as and when required.
-    if (    ELangGreek == currLanguageCode ||
-            ELangRussian == currLanguageCode ||
-            ELangUkrainian == currLanguageCode ||
-            ELangBulgarian == currLanguageCode ||
-            ELangHebrew == currLanguageCode 
-        )
-        {
-        return ETrue;
-        }
-    return EFalse;    
-    }
-#endif
-
-TBool TAknFepInputStateQwerty::CheckForValidNumberEntryForqwerty(TInt aKey)
-    {
-    TChar chr;							
-    TKeyEvent numKey;
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-
-    NumericCharacterForQwertyKey(aKey, numKey,
-                                 ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)|| 
-                                       fepMan->IsFlagSet(CAknFepManager::EFlagLongShiftKeyPress) ), chr);																							 	
-    if ((chr != 0) &&
-        ((iOwner->NumberModeKeyMapping().Locate(chr) != KErrNotFound) ||
-         (KAknFepPlainNumbers().Locate(chr) != KErrNotFound)) ||
-         fepMan->IsAllowedKeymappingForNumberMode(chr)) 
-        {					
-        if (chr == 'E')
-            {
-            TBuf<1> chrTmp;
-            chrTmp.Append(chr);
-            fepMan->NewCharacterL(chrTmp);               	         	                        
-            fepMan->CommitInlineEditL();			
-            }
-        else
-            {							
-            // If editor is in number mode and incoming key press would produce
-            // any of the allowed number mode characters, 
-            // resend suitable key event let it pass through FEP. That way phone idle
-            // receives the event too. This also takes care of remapping
-            // different qwerty keymap layouts to edwin events.
-            if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()))
-                fepMan->SetFlag(CAknFepManager::EFlagPassNextKey);   						 			
-            CPtiEngine* ptiengine = iOwner->PtiEngine();
-            CPtiCoreLanguage* lang = static_cast<CPtiCoreLanguage*>(ptiengine->CurrentLanguage());
-            
-            if (lang && (numKey.iScanCode >= EPtiKeyQwerty0 && numKey.iScanCode <= EPtiKeyQwerty9))
-                {
-                const TInt langCode = lang->LanguageCode();
-                    
-                if(langCode == ELangUrdu || langCode == ELangFarsi)
-                    {
-                    numKey.iCode += KLatinToEasternArabicIndicDigitsDelta;
-                    numKey.iModifiers = numKey.iModifiers|EModifierSpecial;	
-                    }
-                else if (langCode == ELangArabic && fepMan->ArabicIndicDigitsInUse())
-                    {
-                    numKey.iCode += KLatinToArabicIndicDigitsDelta;
-                    numKey.iModifiers = numKey.iModifiers|EModifierSpecial;
-                    }
-                else if(TAknFepUiIndicInputManager::IsIndicLangauge(TLanguage(langCode))
-#ifdef RD_HINDI_PHONETIC_INPUT
-                || TAknFepUiIndicInputManager::IsIndicPhoneticLanguage(TLanguage(langCode))
-#endif
-                )
-                    {
-                    numKey.iCode += KLatinToDevanagariDigitsDelta;							
-                    numKey.iModifiers = numKey.iModifiers|EModifierSpecial;							
-                    }
-                }
-            // Disable UI framewroks's qwerty iCode conversion for simulated event.	
-            numKey.iModifiers |= EModifierSpecial;					
-            if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()))
-                {
-                CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKey);                        
-#ifdef RD_INTELLIGENT_TEXT_INPUT
-                CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKeyUp);
-#endif
-                }
-            }
-        }										  						 	                                  
-						
-    if((fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())
-                &&(numKey.iCode == 112 /*p*/ || numKey.iCode == 119/*w*/))
-        return EFalse;    
-    else if(!fepMan->IsHybridAplhaEditor() || fepMan->IsHybridAlphaModeChangedtoAplhanumeric())
-        return ETrue;
-    else if(!fepMan->IsHybridAlphaModeChangedtoAplhanumeric() && 
-            (chr !=0 || (chr==0 && fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode))))
-        return ETrue;
-    else
-        return EFalse; 
-    }
-// End of file