fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp
branchRCL_3
changeset 21 ecbabf52600f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingDialog.cpp	Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,805 @@
+/*
+* Copyright (c) 2009 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:          
+*
+*/
+
+
+
+
+
+
+
+
+
+
+/*
+ * ============================================================================
+ *  Name     : CAknFepPredictiveSettingList from AknFepPredictiveSettingList 
+ * ============================================================================
+ */
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <uikon/eikctrlstatus.h>
+#endif
+#include <centralrepository.h>
+#include <AknQueryDialog.h>
+#include <AknFepInternalCRKeys.h>
+#include <PtiDefs.h>
+#include <e32property.h>
+#include <AvkonInternalCRKeys.h>
+#include <AknFepInternalPSKeys.h>
+#include <AknFepGlobalEnums.h>
+#include "AknFepPredictiveSettingDialog.h"
+#include <aknnotewrappers.h>
+#include <aknfep.rsg>
+#include <hlplch.h>
+#include <csxhelp/cp.hlp.hrh> 
+#include <akntitle.h> //CAknTitlePane
+#include <StringLoader.h>
+#include <aknnavide.h>
+
+CAknFepPredictiveSettingDialog *CAknFepPredictiveSettingDialog::NewL(TInt aMenuResId, TInt aConfirmationQueryResId, TInt aTitlePaneResId)
+	{
+	CAknFepPredictiveSettingDialog* self = CAknFepPredictiveSettingDialog::NewLC(aMenuResId, aConfirmationQueryResId, aTitlePaneResId);		
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CAknFepPredictiveSettingDialog *CAknFepPredictiveSettingDialog::NewLC(TInt aMenuResId, TInt aConfirmationQueryResId, TInt aTitlePaneResId)
+	{
+	CAknFepPredictiveSettingDialog* self = new (ELeave) CAknFepPredictiveSettingDialog(aConfirmationQueryResId, aTitlePaneResId);
+	CleanupStack::PushL(self);
+	self->ConstructL(aMenuResId);
+    return self;
+	}
+
+void CAknFepPredictiveSettingDialog::ConstructL( TInt aMenuTitleResourceId )
+	{
+	CAknDialog::ConstructL(aMenuTitleResourceId);
+	PrepareStatusPaneL();
+	iItemCloseEventCheck = CIdle::NewL(CActive::EPriorityStandard);
+	iSimuKey = EFalse;
+	}
+
+CAknFepPredictiveSettingDialog ::CAknFepPredictiveSettingDialog(TInt aConfirmationQueryResId, TInt aTitlePaneResId):
+	iConfirmationQueryResId(aConfirmationQueryResId),
+	iPredictiveSettingOffQueryNotShown(ETrue),
+	iTitlePane(NULL),
+	iNaviPane(NULL),
+	iNaviDecoratedTabGroup(NULL),
+	iLastTitle(NULL),
+	iStatusTitle(NULL),
+	iTitlePaneResId(aTitlePaneResId),
+	iSettingItemInEditingState(EFalse)
+	{
+	}
+	
+CAknFepPredictiveSettingDialog::~CAknFepPredictiveSettingDialog()
+	{
+	TRAP_IGNORE(RestoreStatusPaneL());
+	delete iSettingsData;
+
+	delete iItemCloseEventCheck;
+	iItemCloseEventCheck = NULL;
+	if (iAknFepRepository)
+		delete iAknFepRepository;
+	
+	delete iLastTitle;
+	delete iStatusTitle;
+	}
+
+
+SEikControlInfo CAknFepPredictiveSettingDialog::CreateCustomControlL(TInt /*aControlType*/)
+{
+	
+	// construct the data object the settings list will use
+	iSettingsData = CAknFepPredictiveSettingData::NewL();
+	
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+	iOriginalKeyboardLayout = iSettingsData->OwnerKeyboardType();
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+	
+	iAknFepRepository = CRepository::NewL(KCRUidAknFep);	
+	ReadSettingsDataL();
+		
+	iSettingsList = CAknFepPredictiveSettingList::NewL(*iSettingsData, *this);
+	
+	SEikControlInfo controlInfo;
+	controlInfo.iFlags = EEikControlHasEars;
+	controlInfo.iTrailerTextId = 0;
+	controlInfo.iControl = iSettingsList;
+	STATIC_CAST(CAknFepPredictiveSettingList*, controlInfo.iControl)->SetContainerWindowL(*this);
+	
+	return controlInfo;
+}
+
+
+CAknFepPredictiveSettingDialog::TFormControlTypes CAknFepPredictiveSettingDialog::ConvertCustomControlTypeToBaseControlType(TInt /*aControlType*/) const
+{
+	return EPopfieldDerived;
+}
+
+
+TBool CAknFepPredictiveSettingDialog::OkToExitL(TInt aButtonId)
+{
+	TBool retValue = EFalse;
+	switch(aButtonId)
+	{
+	case EAknSoftkeyBack:
+		iSettingsList->StoreSettingsL();
+		SaveSettingsDataL();
+		retValue = ETrue;
+		break;
+	
+	case EAknSoftkeyOptions:
+		DisplayMenuL();
+		break;
+	
+	case EAknSoftkeyChange:
+        EditItemL(EFalse);
+		break;
+	}
+	return retValue;
+}
+
+void CAknFepPredictiveSettingDialog::ProcessCommandL(TInt aCommandId)
+	{
+    if(iSettingItemInEditingState && aCommandId == EAknCmdExit)
+        {
+        // If we are currently editing the settings item then generate a cancel event
+        RWsSession& wsSession = CEikonEnv::Static()->WsSession();
+        TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0};
+        TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey));
+        wsSession.Flush();
+		// After generating cancel event, start the callback function so the settings
+		// page is dismissed.
+        iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );
+        return;
+        }   	
+	
+	// This is TSW eror fixing.
+	// This function is called by dialog framework, whenever menu item is 
+	// selected. we should have to hide existing display menu first to maitain the
+	// control stack .
+	// If user try to stop displaying menu after creating any control
+	// In that situation whenever application goes to background framework remove the
+	// control from the stack when try to remove the menubar from control stack.
+	CAknDialog::ProcessCommandL(aCommandId);
+	
+	switch(aCommandId)
+		{
+		case EAknFepCmdPredSettingChange:
+			EditItemL(ETrue);
+			break;
+		case EAknCmdHelp:
+			{
+				
+            const TInt KArrayGranularity = 3;
+            CArrayFix<TCoeHelpContext>* contexts =
+                    new (ELeave) CArrayFixFlat<TCoeHelpContext>( KArrayGranularity );
+	    	CleanupStack::PushL ( contexts );
+	    	TUid appuid = { 0x100058EC };
+	    	contexts->AppendL( TCoeHelpContext( appuid, KPREDINPUT_HLP_INPUT ) );
+	    	CleanupStack::Pop( contexts );
+	    	HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), contexts );		
+			}
+			break;
+		case EAknCmdExit:
+			// Save the setting and exit application.
+			iSettingsList->StoreSettingsL();
+			SaveSettingsDataL();
+			// Pass the EAknCmdExit command to Avkon 
+			// Framework 
+			iAvkonAppUi->ProcessCommandL(aCommandId);
+			break;
+		}
+	}
+
+void CAknFepPredictiveSettingDialog::ReadSettingsDataL()
+    {
+    TInt autoWordCompl = 0;
+	TInt typingCorrection = 0;
+	TInt numberCandidates = 0;
+	TInt primaryCandidate = 0;
+	TInt physicalKeyboards = 0;
+    // Read CenRep 
+	if( iAknFepRepository )
+		{
+		iAknFepRepository->Get(KAknFepPredTxtFlagExtension, iPredictiveTextFlag);
+		iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoWordCompl);
+		iAknFepRepository->Get(KAknFepTypingCorrectionLevel, typingCorrection);
+		iAknFepRepository->Get(KAknFepNumberCandidateFlag, numberCandidates);
+		iAknFepRepository->Get(KAknFepPrimaryCandidateFlag, primaryCandidate);
+		iAknFepRepository->Get(KAknFepPhysicalKeyboards, physicalKeyboards);
+		}
+
+    // Parse keyboard dependent settings for current keyboard from bitmask
+	TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();	
+	TInt autoTmp = autoWordCompl;
+	
+	// This part of code for error fixing:	    
+	// IF ITI is off for QWERTY/ITU-T iPredictiveTextFlag = 0
+	// IF ITI is on for ITU-T 		  iPredictiveTextFlag = 1
+	// IF ITI is on for QWERTY 	  	  iPredictiveTextFlag = 2
+	
+	switch(layout)
+	    {
+	    case EPtiKeyboardNone:
+	        break;
+	  	case EPtiKeyboard12Key:
+	        autoTmp &= EKeyboardStyle12Key;
+	        iPredictiveTextFlag &= EKeyboardStyle12Key;
+	        break;
+	    case EPtiKeyboardHalfQwerty:
+	        autoTmp &= EKeyboardStyleHalfQwerty;
+	        iPredictiveTextFlag &= EKeyboardStyleHalfQwerty;
+	        break;
+	  	case EPtiKeyboardQwerty4x12:
+	  	case EPtiKeyboardQwerty4x10:
+	  	case EPtiKeyboardQwerty3x11:	  	
+	  	case EPtiKeyboardCustomQwerty:
+	        autoTmp &= EKeyboardStyleQwerty;
+	        iPredictiveTextFlag &= EKeyboardStyleQwerty;
+	        break;
+	  	default:
+	  	    break;
+	    }
+	
+	//load setting data
+	iSettingsData->LoadL(( autoTmp ? 1 : 0), typingCorrection, numberCandidates,
+	           primaryCandidate, physicalKeyboards, autoWordCompl);
+   
+    }
+    
+
+void CAknFepPredictiveSettingDialog::SaveSettingsDataL() const
+    {
+    // Read setting data and fill CenRep.
+	if( iAknFepRepository )
+	  	{
+	   	TInt autoFlag = 0;
+	   	iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag);
+	   	TInt predFlag = 0;
+	   	iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
+
+	   	// Parse keyboard dependent settings for current keyboard from bitmask
+	   	TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();	   	
+	   	switch(layout)
+	   	    {
+	   	    case EPtiKeyboardNone:
+	   	        break;
+	   	    case EPtiKeyboard12Key:
+	   	        if (iSettingsData->AutoWordCompl())
+	   	            {
+	   	            autoFlag |= EKeyboardStyle12Key;
+	   	            }
+	   	        else
+	   	            {
+	   	            autoFlag &= ~EKeyboardStyle12Key;
+	   	            }
+	   	        break;
+	   	    case EPtiKeyboardHalfQwerty:
+	   	        if (iSettingsData->AutoWordCompl())
+	   	            {
+	   	            autoFlag |= EKeyboardStyleHalfQwerty;
+	   	            }
+	   	        else
+	   	            {
+	   	            autoFlag &= ~EKeyboardStyleHalfQwerty;
+	   	            }
+	   	    case EPtiKeyboardQwerty4x12:
+	   	    case EPtiKeyboardQwerty4x10:
+	   	    case EPtiKeyboardQwerty3x11:
+	   	    
+	   	    case EPtiKeyboardCustomQwerty:
+	   	        if (iSettingsData->AutoWordCompl())
+	   	            {
+	   	            autoFlag |= EKeyboardStyleQwerty;
+	   	            }
+	   	        else
+	   	            {
+	   	            autoFlag &= ~EKeyboardStyleQwerty;
+	   	            }
+	   	        break;
+	   	    default:
+	   	        break;
+	   	    }
+
+	    if(iSettingsList->DeviceHasMultipleKeyboards())
+	        {
+	        iAknFepRepository->Set(KAknFepAutoCompleteFlag, iSettingsData->AWCBitmask());
+	        }
+	    else
+	        {
+	        iAknFepRepository->Set(KAknFepAutoCompleteFlag, autoFlag);            
+	        }
+	    iAknFepRepository->Set(KAknFepTypingCorrectionLevel, iSettingsData->TypingCorrection());
+	    iAknFepRepository->Set(KAknFepNumberCandidateFlag, iSettingsData->NumberCandidates());
+	    iAknFepRepository->Set(KAknFepPrimaryCandidateFlag, iSettingsData->PrimaryCandidate());
+	    }
+    }
+
+void CAknFepPredictiveSettingDialog::SaveCurrentSettingsDataL() const
+    {
+    // Read setting data and fill CenRep.
+   	if(iAknFepRepository)
+      	{
+      	if(EAutoWordCompletion == iSettingsList->ListBox()->CurrentItemIndex())
+      		{
+	   		TInt autoFlag = 0;
+	   		iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag);
+	   		TInt predFlag = 0;
+	   		iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
+
+	   		// Parse keyboard dependent settings for current keyboard from bitmask
+	   		TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();
+	   		switch(layout)
+	   	    	{
+		   	    case EPtiKeyboardNone:
+		   	        break;
+	   		    case EPtiKeyboard12Key:
+	   	    	    if (iSettingsData->AutoWordCompl())
+	   	        	    {
+	   	            	autoFlag |= EKeyboardStyle12Key;
+		   	            }
+		   	        else
+	   		            {
+	   	    	        autoFlag &= ~EKeyboardStyle12Key;
+	   	        	    }
+		   	        break;
+		   	    case EPtiKeyboardHalfQwerty:
+	   		        if (iSettingsData->AutoWordCompl())
+	   	    	        {
+	   	        	    autoFlag |= EKeyboardStyleHalfQwerty;
+	   	            	}
+		   	        else
+		   	            {
+	   		            autoFlag &= ~EKeyboardStyleHalfQwerty;
+	   	    	        }
+		   	        break;
+		   	    case EPtiKeyboardQwerty4x12:
+	   		    case EPtiKeyboardQwerty4x10:
+	   	    	case EPtiKeyboardQwerty3x11:
+		   	    case EPtiKeyboardCustomQwerty:
+	   		        if (iSettingsData->AutoWordCompl())
+	   	    	        {
+	   	        	    autoFlag |= EKeyboardStyleQwerty;
+	   	            	}
+		   	        else
+		   	            {
+	   		            autoFlag &= ~EKeyboardStyleQwerty;
+	   	    	        }
+		   	        break;
+		   	    default:
+	   		        break;
+	   	    	}
+
+		    if(iSettingsList->DeviceHasMultipleKeyboards())
+	    	    {
+	        	iAknFepRepository->Set(KAknFepAutoCompleteFlag, iSettingsData->AWCBitmask());
+		        }
+		    else
+	    	    {
+	        	iAknFepRepository->Set(KAknFepAutoCompleteFlag, autoFlag);            
+		        }
+      		}
+        else if(ETypingCorrectionLevel == iSettingsList->ListBox()->CurrentItemIndex())
+        	{
+        	iAknFepRepository->Set(KAknFepTypingCorrectionLevel, iSettingsData->TypingCorrection());
+        	}
+        else if(ENumberCandidate  == iSettingsList->ListBox()->CurrentItemIndex())
+        	{
+        	iAknFepRepository->Set(KAknFepNumberCandidateFlag, iSettingsData->NumberCandidates());	
+        	}
+        else if(EPrimaryCandidate == iSettingsList->ListBox()->CurrentItemIndex())
+        	{
+        	iAknFepRepository->Set(KAknFepPrimaryCandidateFlag, iSettingsData->PrimaryCandidate());	
+        	}
+        }
+    }
+
+
+void CAknFepPredictiveSettingDialog::EditItemL(TBool aCalledFromMenu)
+	{
+	TInt prevSettings = CurrentSettings();
+	
+	// Set the flag as we are currently editing the settings item
+	iSettingItemInEditingState = ETrue;
+
+	iSettingsList->EditCurrentItemL(aCalledFromMenu);
+	if(iSettingItemInEditingState == EFalse)
+	    {
+	    User::Leave(KErrNone);
+	    }
+	LaunchPredictiveSettingOffQueryIfNecessaryL(prevSettings);
+	SaveCurrentSettingsDataL();
+
+	//Reset the flag as the current item edit is over
+	iSettingItemInEditingState = EFalse;	
+	}
+
+void CAknFepPredictiveSettingDialog::LaunchPredictiveSettingOffQueryIfNecessaryL(TInt prevSettings)
+	{
+	if(iPredictiveSettingOffQueryNotShown)
+		{
+   		if(iAknFepRepository)
+   			{
+   			iAknFepRepository->Get(KAknFepPredTxtFlagExtension,iPredictiveTextFlag);
+   			}
+   		TPtiKeyboardType layout = iSettingsData->OwnerKeyboardType();
+       	TBool QueryNeeded = EFalse;
+		if(iSettingsList->DeviceHasMultipleKeyboards())
+			{
+			TInt activateITIForKbd = 0;
+       		if(EAutoWordCompletion == iSettingsList->ListBox()->CurrentItemIndex() && 
+       			iSettingsData->AWCBitmask() != prevSettings & 0xF)
+       			{
+       			// if AWC is ON and Prev.Settings of AWC is not ON and ITI is OFF
+       			if((iSettingsData->AWCBitmask() & EKeyboardStyle12Key) && 
+       			   ((prevSettings & 0xF) & EKeyboardStyle12Key)!=1 &&
+       			   (iPredictiveTextFlag & EKeyboardStyle12Key) == 0)
+       				{
+       				QueryNeeded = ETrue;
+       				activateITIForKbd |= EKeyboardStyle12Key ;
+       				if(layout == EPtiKeyboard12Key)
+       					iPredictiveSettingOffQueryNotShown = EFalse;
+       				}
+       			// if AWC is ON and Prev.Settings of AWC is not ON and ITI is OFF		
+       			if((iSettingsData->AWCBitmask() & EKeyboardStyleQwerty) && 
+       			   ((prevSettings & 0xF) & EKeyboardStyleQwerty)!=2 &&
+       			   (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0)
+       				{
+       				QueryNeeded = ETrue;
+       				activateITIForKbd |= EKeyboardStyleQwerty ;
+       				if(layout == EKeyboardStyleQwerty)
+       					iPredictiveSettingOffQueryNotShown = EFalse;
+       				}
+       			if((iSettingsData->AWCBitmask() & EKeyboardStyleHalfQwerty) && 
+       			   ((prevSettings & 0xF) & EKeyboardStyleHalfQwerty)!=4 &&
+       			   (iPredictiveTextFlag & EKeyboardStyleHalfQwerty) == 0)
+       				{
+       				QueryNeeded = ETrue;
+       				activateITIForKbd |= EKeyboardStyleHalfQwerty ;
+       				if(layout == EKeyboardStyleHalfQwerty)
+       					iPredictiveSettingOffQueryNotShown = EFalse;
+       				}
+       			}
+       		// if Prev.Setting of TypingCorrection != Curr.Settng of TypingCorrection and
+       		// Current TypingCorrection != OFF and ITI is OFF	
+       		else if(iSettingsData->iTypingCorrection != ((prevSettings >> 4)&0xF) &&
+					ETypingCorrectionLevel == iSettingsList->ListBox()->CurrentItemIndex() && 
+			        0 != iSettingsData->TypingCorrection() &&
+			        (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0)
+				{
+				QueryNeeded = ETrue;
+				iPredictiveSettingOffQueryNotShown = EFalse;
+				activateITIForKbd |= EKeyboardStyleQwerty ;
+				}
+			// if Prev.Setting of NumberCandidate != Curr.Settng of NumberCandidate and
+       		// Current NumberCandidate is ON and ITI is OFF		
+       		else if(iSettingsData->iNumberCandidates != ((prevSettings >> 8)&0xF) &&
+       				ENumberCandidate == iSettingsList->ListBox()->CurrentItemIndex() && 
+			        1 == iSettingsData->NumberCandidates() &&
+			        (iPredictiveTextFlag & EKeyboardStyleQwerty) == 0)
+       			{
+       			QueryNeeded = ETrue;
+       			iPredictiveSettingOffQueryNotShown = EFalse;
+       			activateITIForKbd |= EKeyboardStyleQwerty ;
+       			}
+			
+			if(QueryNeeded)
+				{
+				CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+				if(dlg->ExecuteLD(iConfirmationQueryResId))
+					{
+				    if(activateITIForKbd & EKeyboardStyle12Key)
+				    	{
+				    	iPredictiveTextFlag |= EKeyboardStyle12Key;
+				    	}
+		       	    	
+		       	    if(activateITIForKbd & EKeyboardStyleQwerty)
+		       	    	{
+		       	    	iPredictiveTextFlag |= EKeyboardStyleQwerty;
+		       	    	}
+						if(activateITIForKbd & EKeyboardStyleHalfQwerty)
+		       	    	{
+		       	    	iPredictiveTextFlag |= EKeyboardStyleHalfQwerty;
+		       	    	} 	
+		       	    }
+				}
+			}
+		else
+			{
+			TInt predFlag = 0;
+			iAknFepRepository->Get(KAknFepPredTxtFlagExtension, predFlag);
+			TInt autoFlag = 0;
+       		iAknFepRepository->Get(KAknFepAutoCompleteFlag, autoFlag);
+
+	       	switch(layout)
+    	   	    {
+       		    case EPtiKeyboardNone:
+       	    	    break;
+       	    	case EPtiKeyboard12Key:
+       	    		autoFlag = ((autoFlag & EPtiKeyboard12Key)!=0);
+	       	    	// if ITI is ON for QWERTY then iPredictiveTextFlag = 2; In that case we have to find out the ITI state for ITU-T
+    	   	        if (!( iPredictiveTextFlag & EKeyboardStyle12Key ))
+       		            {
+       	    	        predFlag |= EKeyboardStyle12Key;
+       	        	    }
+       	    		
+       	    		break;
+       	    	case EPtiKeyboardHalfQwerty:
+       	    		autoFlag = ((autoFlag & EKeyboardStyleHalfQwerty)!=0);
+    	   	        if (!(iPredictiveTextFlag & EKeyboardStyleHalfQwerty ))
+       		            {
+       	    	        predFlag |= EKeyboardStyleHalfQwerty;
+       	            	}
+       	    		break;
+				case EPtiKeyboardQwerty4x12:
+       	    	case EPtiKeyboardQwerty4x10:
+       	    	case EPtiKeyboardQwerty3x11:
+       	    	case EPtiKeyboardCustomQwerty:
+       	    		autoFlag = ((autoFlag & EKeyboardStyleQwerty)!=0);
+	       	    	// if ITI is ON for ITU-T then iPredictiveTextFlag = 1; In that case we have to find out the ITI state for QWERTY
+    	   	        if (!(iPredictiveTextFlag & EKeyboardStyleQwerty ))
+       		            {
+       	    	        predFlag |= EKeyboardStyleQwerty;
+       	            	}
+       	    		break;
+       	    	default:
+       	    		break;
+    	   	    }
+
+			
+			if (predFlag != iPredictiveTextFlag)
+			    {
+			    switch(iSettingsList->ListBox()->CurrentItemIndex())
+			    	{
+			    	case EAutoWordCompletion:
+			    		if(iSettingsData->iAutoWordCompl != autoFlag &&
+			    			1 == iSettingsData->AutoWordCompl())
+			    			{
+			    			QueryNeeded = ETrue;	
+			    			}
+			    		break;
+			    	case ETypingCorrectionLevel:
+			    		if(iSettingsData->iTypingCorrection != ((prevSettings >> 4)&0xF) && 
+			    			0 != iSettingsData->TypingCorrection())
+			    			{
+			    			QueryNeeded = ETrue;
+			    			}
+			    		break;
+			    	case ENumberCandidate:
+			    		if(iSettingsData->iNumberCandidates != ((prevSettings >> 8)&0xF) && 
+			    			0 != iSettingsData->NumberCandidates())
+			    			{
+			    			QueryNeeded = ETrue;
+			    			}
+			    		break;
+			    	}
+				
+				if(QueryNeeded)
+					{
+					CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+					if(dlg->ExecuteLD(iConfirmationQueryResId))
+						iPredictiveTextFlag = predFlag;
+
+					iPredictiveSettingOffQueryNotShown = EFalse;	
+					}
+				}
+			}
+		if(iAknFepRepository && QueryNeeded)
+			{
+			iAknFepRepository->Set(KAknFepPredTxtFlagExtension,iPredictiveTextFlag);
+       		iAknFepRepository->Set(KAknFepPredTxtFlag, iPredictiveTextFlag != 0); // For backwards compatibility							
+			}						
+		}
+	}
+TInt CAknFepPredictiveSettingDialog::CurrentSettings()
+	{
+	TInt settings = 0;
+	//settings are the values of first 16 bits
+	//	settings & 0xF = iAWCBitmask
+	//	(settings >> 4) & 0xF = iNumberCandidates
+	//	(settings >> 8) & 0xF = iTypingCorrection
+	//	(settings >> 12) & 0xF = iPrimaryCandidate
+	settings = (iSettingsData->iPrimaryCandidate << 12) |
+				(iSettingsData->iNumberCandidates << 8) |
+				(iSettingsData->iTypingCorrection << 4) |
+				(iSettingsData->AWCBitmask());
+	return settings;				
+	}
+
+// This part of code for error fixing multiple layout.
+void CAknFepPredictiveSettingDialog::HandleResourceChange(TInt aType)
+	{
+	
+    CAknDialog::HandleResourceChange(aType);
+ 
+    // Check for keyboard layout change
+    // If layout is changed, load the setting information based on 
+    // Layout.
+    if(aType==KEikDynamicLayoutVariantSwitch)
+        {
+    
+    	// Read the Predictive setting
+         if(iAknFepRepository)
+        	{
+        	iAknFepRepository->Get(KAknFepPredTxtFlagExtension, iPredictiveTextFlag);
+        	}
+   
+   		// Adjust predictive flag after layout switch
+         TPtiKeyboardType keyboardLayout = iSettingsData->ActiveKeyboardType();
+	//settings page not to be retained on change of keyboard layout for Touch Input.
+#ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+         
+        if ( iOriginalKeyboardLayout != keyboardLayout )
+            {
+            if(iSettingItemInEditingState)
+            	{
+				if (!iSimuKey)
+				    {
+					// If we are currently editing the settings item then generate a cancel event
+					// and start the scheduler so as to close the settings page 
+					// when the blocking call completes. 
+					RWsSession& wsSession = CEikonEnv::Static()->WsSession();
+					TKeyEvent escapeEvent = {EKeyEscape, EStdKeyEscape, 0, 0};
+					TRAP_IGNORE(CEikonEnv::Static()->SimulateKeyEventL(escapeEvent, EEventKey));
+					iSimuKey = ETrue;
+					wsSession.Flush();
+					iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );
+				    }
+            	}
+            else
+	            {
+    	        // In case the current settings item is not in editing state then directly 
+    	        // close the settings page.
+            	TRAP_IGNORE(TryExitL(EAknSoftkeyBack));	
+    	        }
+            return;
+            }
+#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
+     	switch(keyboardLayout)
+   	    	{
+	   	    case EPtiKeyboard12Key:
+	   	    	// Dictionary is ON for ITU-T
+	   	    	iPredictiveTextFlag	&= EKeyboardStyle12Key;
+	   	    	break;
+	   	    case EPtiKeyboardQwerty4x12:
+	   	    case EPtiKeyboardQwerty4x10:
+	   	    case EPtiKeyboardQwerty3x11:
+	   	    case EPtiKeyboardHalfQwerty:
+	   	    case EPtiKeyboardCustomQwerty:
+	   	    	// 	// Dictionary is ON for QWERTY
+	   	    	iPredictiveTextFlag &= EKeyboardStyleQwerty;
+	   	    case EPtiKeyboardNone:
+	   	    default:
+	   	        break;
+   	        }
+        TRAP_IGNORE(SetTitlePaneL());
+        }    
+	}
+
+TInt CAknFepPredictiveSettingDialog::EventCheckCallback(TAny* aObj)
+	{
+    TRAP_IGNORE(static_cast<CAknFepPredictiveSettingDialog*>(aObj)->AttemptToExitL());
+    return KErrNone;	
+	}
+	
+void CAknFepPredictiveSettingDialog::AttemptToExitL()
+	{
+	if(iItemCloseEventCheck->IsActive())
+		{
+		iItemCloseEventCheck->Cancel();	
+		}
+	// iSettingItemInEditingState sets before the blocking call of editing item state and 
+	// gets reset after the blocking call.
+    if (!iSettingItemInEditingState)
+    	{
+    	// In case we are here, then we need to close the settings item because of layout change
+    	TRAP_IGNORE(TryExitL(EAknSoftkeyBack));	
+    	}
+    else
+    	{
+    	// Because of priority we hit the scheduler first and then the blocking call gets
+    	// executed. To handle such a scenario, restart the scheduler.
+    	iItemCloseEventCheck->Start( TCallBack(EventCheckCallback, this) );	
+    	}
+	}
+	
+void CAknFepPredictiveSettingDialog::PrepareStatusPaneL()
+    {
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    CAknAppUi* appUi = static_cast<CAknAppUi*>(coeEnv->AppUi());
+    CEikStatusPane* statusPane = appUi->StatusPane();
+    
+    iTitlePane = static_cast<CAknTitlePane*>( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+    
+    const TDesC* appTitle = iTitlePane->Text();
+    iLastTitle = appTitle->AllocL();
+    
+    iStatusTitle = StringLoader::LoadL( iTitlePaneResId,coeEnv);
+    SetTitlePaneL();
+    
+    iNaviPane = static_cast<CAknNavigationControlContainer*>(statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+    
+    if(iNaviPane)
+        {
+        // Create a new tab Groub for Settings Page and push it on the Navigation Pane
+        // This is done so as to avoid previous page Tab Group to be used
+        iNaviDecoratedTabGroup = iNaviPane->CreateTabGroupL();
+        if(iNaviDecoratedTabGroup)
+            {
+            // Tab Group visibility is set to false
+            iNaviDecoratedTabGroup->MakeVisible(EFalse);
+            iNaviPane->PushL(*iNaviDecoratedTabGroup);
+            }
+        } 
+    }
+
+void CAknFepPredictiveSettingDialog::SetTitlePaneL()
+    {
+    iTitlePane->SetTextL( *iStatusTitle );
+    }
+
+void CAknFepPredictiveSettingDialog::RestoreStatusPaneL()
+    {
+    iTitlePane->SetTextL( *iLastTitle );
+    
+    if(iNaviPane && iNaviDecoratedTabGroup)
+        {
+        // Pop the Tab Group created for the Settings page
+        iNaviPane->Pop();
+        delete iNaviDecoratedTabGroup;
+        iNaviDecoratedTabGroup = NULL;
+        }    
+    }
+
+void CAknFepPredictiveSettingDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+    {
+    if ( aPointerEvent.iType == TPointerEvent::EDrag )
+        {
+        iSettingsList->HandlePointerEventL(aPointerEvent);
+        }
+    else
+        {
+        CAknDialog::HandlePointerEventL(aPointerEvent);
+        }
+    }
+
+/**
+ *From MEikCommandObserver
+ */
+void CAknFepPredictiveSettingDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) 
+    {
+    if ( iAvkonAppUi->IsSingleClickCompatible() )
+        {
+        if ( R_PREDICTIVESETTINGDIALOG_MENU == aResourceId )
+            {
+            aMenuPane->SetItemDimmed(EAknFepCmdPredSettingChange, ETrue);
+            }
+        } 
+    }
+
+/**
+ * From CAknDialog
+ */
+void CAknFepPredictiveSettingDialog::SizeChanged()
+    {
+    if( iSettingsList != NULL && iSettingsList->ListBox() != NULL )
+    	{
+        iSettingsList->ListBox()->EnableStretching(EFalse);
+    	}
+    CAknDialog::SizeChanged();
+    }