omads/omadsappui/AspSyncUtil/src/AspAdvanceSettingsDialog.cpp
branchRCL_3
changeset 52 4f0867e42d62
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsappui/AspSyncUtil/src/AspAdvanceSettingsDialog.cpp	Wed Sep 01 12:30:02 2010 +0100
@@ -0,0 +1,1011 @@
+/*
+* Copyright (c) 2005 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:  
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "AspAdvanceSettingsDialog.h"
+#include "AspContentDialog.h"
+#include "AspSyncUtil.rh"
+#include "AspDebug.h"
+#include <csxhelp/ds.hlp.hrh>
+
+#include <aspsyncutil.mbg>  // for bitmap enumerations
+#include <AknIconArray.h>   // for GulArray
+#include <aknpasswordsettingpage.h>     // CAknAlphaPasswordSettingPage
+#include <ConnectionUiUtilities.h>      // CConnectionUiUtilities
+#include <featmgr.h>   // FeatureManager
+#include "AspDefines.h" //For enum TRoamingSettings
+#include <centralrepository.h> //For central Repository
+#include "CPreSyncPlugin.h"
+
+const TInt KMSKControlId( CEikButtonGroupContainer::EMiddleSoftkeyPosition );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+
+// -----------------------------------------------------------------------------
+// CAspProfileDialog::ShowDialogL
+// 
+// -----------------------------------------------------------------------------
+TBool CAspAdvanceSettingsDialog::ShowDialogL()
+	{
+	CAspAdvanceSettingsDialog* dialog = CAspAdvanceSettingsDialog::NewL();
+
+	TBool ret = dialog->ExecuteLD(R_ASP_ADVANCE_SETTINGS_DIALOG);
+
+    return ret;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::NewL
+//
+// -----------------------------------------------------------------------------
+CAspAdvanceSettingsDialog* CAspAdvanceSettingsDialog::NewL()
+    {
+    FLOG( _L("CAspAdvanceSettingsDialog::NewL START") );
+
+    CAspAdvanceSettingsDialog* self = new ( ELeave ) CAspAdvanceSettingsDialog();
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    FLOG( _L("CAspAdvanceSettingsDialog::NewL END") );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::CAspAdvanceSettingsDialog
+// 
+// -----------------------------------------------------------------------------
+//
+CAspAdvanceSettingsDialog::CAspAdvanceSettingsDialog()
+	{
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::ConstructL()
+    {
+    FLOG( _L("CAspAdvanceSettingsDialog::ConstructL START") );
+	
+	// contruct menu for our dialog
+	CAknDialog::ConstructL(R_ADVANCE_SETTINGS_DIALOG_MENU);
+
+	iResHandler = CAspResHandler::NewL();
+
+	iSettingList = new (ELeave) CArrayPtrFlat<CAspListItemData>(1);
+	
+	// get previous title so it can be restored
+	iStatusPaneHandler = CStatusPaneHandler::NewL(iAvkonAppUi);
+	iStatusPaneHandler->StoreOriginalTitleL();
+	
+	// store current navi pane
+	iStatusPaneHandler->StoreNavipaneL();
+
+	FLOG( _L("CAspAdvanceSettingsDialog::ConstructL END") );
+    } 
+
+
+// ----------------------------------------------------------------------------
+// Destructor
+//
+// ----------------------------------------------------------------------------
+//
+CAspAdvanceSettingsDialog::~CAspAdvanceSettingsDialog()
+    {
+    FLOG( _L("CAspAdvanceSettingsDialog::~CAspAdvanceSettingsDialog START") );
+
+	delete iResHandler;
+	
+	if (iSettingList)
+		{
+		iSettingList->ResetAndDestroy();
+	    delete iSettingList;
+		}
+
+	delete iStatusPaneHandler;
+	
+    if (iAvkonAppUi)
+    	{
+    	iAvkonAppUi->RemoveFromStack(this);
+    	}
+
+	FLOG( _L("CAspAdvanceSettingsDialog::~CAspAdvanceSettingsDialog END") );
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::ActivateL
+//
+// Called by system when dialog is activated.
+//------------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::ActivateL()
+	{
+    CAknDialog::ActivateL();
+
+	// this cannot be in ConstructL which is executed before dialog is launched
+	iAvkonAppUi->AddToStackL(this);
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspContentListDialog::GetHelpContext
+//
+//------------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::GetHelpContext(TCoeHelpContext& aContext) const
+	{
+	aContext.iMajor = KUidSmlSyncApp;
+	aContext.iContext = KDS_HLP_MAIN_VIEW;    
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::HandleListBoxEventL
+// 
+// -----------------------------------------------------------------------------
+#ifdef RD_SCALABLE_UI_V2
+void CAspAdvanceSettingsDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/,
+                                            TListBoxEvent aEventType)
+	{
+	if( AknLayoutUtils::PenEnabled() )  
+	  {
+	   switch ( aEventType )
+        {
+        case EEventItemSingleClicked:
+              HandleOKL();
+              break;
+         case EEventEnterKeyPressed :
+
+         case EEventItemDraggingActioned :
+         case EEventPenDownOnItem :
+        	  if(iEditMode != EDialogModeSettingEnforcement)
+				    {
+				    TRAPD(err ,CheckContentSettingL());//folder
+		         	User::LeaveIfError(err);
+				    }
+              break;
+         default:
+              break;
+        }
+		
+	  }
+    
+	}
+#else
+void CAspAdvanceSettingsDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/,
+                                            TListBoxEvent /*aEventType*/)
+{
+	
+}
+#endif
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::PreLayoutDynInitL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::PreLayoutDynInitL()
+    {
+    iSettingListBox = (CAknSettingStyleListBox*) ControlOrNull (EAdvanceSettingsDialogList);
+    
+   	__ASSERT_ALWAYS(iSettingListBox, TUtil::Panic(KErrGeneral));
+    
+	iSettingListBox->SetListBoxObserver(this);
+	iSettingListBox->CreateScrollBarFrameL(ETrue);
+	iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+	                 CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto);
+	
+	SetIconsL();
+	
+	// create array of setting items (iSettingList)
+	CreateSettingsListL();
+
+	// add setting headers into listbox
+	UpdateListBoxL(iSettingListBox, iSettingList);
+		
+	iStatusPaneHandler->SetNaviPaneTitleL(R_ASP_TITLE_ADVANCED_SETTINGS);
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::SetMiddleSoftKeyLabelL
+//
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::SetEmptyMiddleSoftKeyLabelL()
+    {
+    ButtonGroupContainer().RemoveCommandFromStack(KMSKControlId,EAknSoftkeyOpen );
+    HBufC* middleSKText = StringLoader::LoadLC( R_TEXT_SOFTKEY_EMPTY );
+
+    ButtonGroupContainer().AddCommandToStackL(
+        KMSKControlId,
+        EAknSoftkeyEmpty,
+        *middleSKText );
+    iMSKEmpty= ETrue;
+    CleanupStack::PopAndDestroy( middleSKText );
+    }
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::SetIconsL
+//
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::SetIconsL()
+    {
+    if (!iSettingListBox)
+    	{
+    	return;
+    	}
+ 
+ 	TFileName bitmapName;
+	CAspResHandler::GetBitmapFileName(bitmapName);
+	CArrayPtr<CGulIcon>* icons = new (ELeave) CAknIconArray(KDefaultArraySize);
+	CleanupStack::PushL(icons);
+	
+	icons->AppendL(IconL(KAknsIIDQgnIndiSettProtectedAdd, bitmapName,
+	                     EMbmAspsyncutilQgn_indi_sett_protected_add,
+	                     EMbmAspsyncutilQgn_indi_sett_protected_add_mask));
+	
+    // delete old icons
+    CArrayPtr<CGulIcon>* arr =
+    iSettingListBox->ItemDrawer()->FormattedCellData()->IconArray();
+    
+    if (arr)
+    	{
+    	arr->ResetAndDestroy();
+	    delete arr;
+	    arr = NULL;
+    	}
+
+	iSettingListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL(icons);
+	CleanupStack::Pop(icons);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::IconL
+// 
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CAspAdvanceSettingsDialog::IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex, TInt aFileMaskIndex)
+	{
+    return TDialogUtil::CreateIconL(aId, aFileName, aFileIndex, aFileMaskIndex);
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::DynInitMenuPaneL
+//
+// Called by system before menu is shown.
+//------------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::DynInitMenuPaneL(TInt /*aResourceID*/, CEikMenuPane* aMenuPane)
+	{   
+	CAspListItemData* item = GetItemForIndex(ListBox()->CurrentItemIndex());
+	if (item->iHidden == EVisibilityReadOnly)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChange);
+		}
+	
+	if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdHelp);
+		}
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::ProcessCommandL
+//
+// Handle commands from menu.
+//------------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::ProcessCommandL(TInt aCommandId)
+	{
+	HideMenu();
+
+	switch (aCommandId)
+		{
+		case EAspMenuCmdHelp:
+		case EAknCmdHelp:
+			{
+			TUtil::LaunchHelpAppL(iEikonEnv);
+            break;
+			}
+
+		case EAspMenuCmdChange:
+		case EAspMenuCmdOpen:
+			{				
+    		CAspListItemData* item = GetItemForIndex(ListBox()->CurrentItemIndex());
+
+			if (item->iItemType == CAspListItemData::ETypeListYesNo)
+				{
+				// open editor for Yes/No setting
+				if (EditSettingItemListL(*item))
+					{
+					SetVisibility();
+					UpdateListBoxL(ListBox(), iSettingList);
+					}
+				}				
+			else
+				{
+				HandleOKL();
+				}
+
+			break;
+			}
+		    
+        case EAspMenuCmdExit:
+        case EAknCmdExit:
+        case EEikCmdExit:
+			{
+			// close dialog and exit calling application
+			iAvkonAppUi->ProcessCommandL(EAknCmdExit);
+			break;
+			}
+
+		default:			
+		    break;
+		}
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::OkToExitL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspAdvanceSettingsDialog::OkToExitL(TInt aButtonId)
+	{
+	if (aButtonId == EEikBidCancel)
+		{
+		// save silently and close dialog
+		
+		CheckSettingValues(aButtonId);
+
+		return ETrue; // close dialog
+		}
+
+	if (aButtonId == EAknSoftkeyBack)
+        {
+        TBool ret = CheckSettingValues(aButtonId);
+        if (!ret)
+        	{
+        	return EFalse; // leave dialog open
+        	}
+        	
+		return ETrue; // close dialog
+		}
+		
+	if (aButtonId == EAknSoftkeyOpen || aButtonId == EAknSoftkeyEmpty)  // MSK
+        {
+		CAspListItemData* item = GetItemForIndex(ListBox()->CurrentItemIndex());
+		if (item->iHidden == EVisibilityReadOnly)
+			{
+    		if(iEditMode == EDialogModeSettingEnforcement)
+    		{
+    			TDialogUtil::ShowInformationNoteL(R_ASP_PROTECTED_SETTING);
+    		}
+     		else
+     		{
+			TDialogUtil::ShowInformationNoteL(R_ASP_NOTE_READ_ONLY);
+     		}
+			return EFalse;
+			}
+
+        HandleOKL();
+		return EFalse;  // leave dialog open
+		}
+		
+	if (aButtonId == EAknSoftkeyOptions)	
+		{
+		if (iCommandSetId == R_ASP_CBA_OPTIONS_BACK_OPEN)
+			{
+			UpdateMenuL(R_ADVANCE_SETTINGS_DIALOG_MENU);
+			}	
+		else 
+			{
+			UpdateMenuL(R_ASP_PROFILE_DIALOG_MENU);	
+			}
+		return EFalse;
+		}
+	return CAknDialog::OkToExitL(aButtonId);
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::CheckSettingValuesL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspAdvanceSettingsDialog::CheckSettingValuesL(TInt /* aButtonId */)
+	{
+	
+    if (iEditMode == EDialogModeReadOnly || 
+        iEditMode == EDialogModeSettingEnforcement)
+    	{
+    	return ETrue;
+    	}
+	
+    return ETrue;
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::CheckSettingValues
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspAdvanceSettingsDialog::CheckSettingValues(TInt aButtonId)
+	{
+	TBool ret = EFalse;
+	
+	TRAPD(err, ret = CheckSettingValuesL(aButtonId));
+	if (err != KErrNone)
+		{
+		return ETrue;
+		}
+
+	return ret;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::OfferKeyEventL
+// 
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CAspAdvanceSettingsDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	if (aType == EEventKey)
+		{
+		switch (aKeyEvent.iCode)
+			{
+			case EKeyEnter:
+			case EKeyOK:
+				{
+					OkToExitL(EAknSoftkeyOpen);
+					return EKeyWasConsumed;
+				}
+			case EKeyEscape:  // framework calls this when dialog must shut down
+				{
+				return CAknDialog::OfferKeyEventL(aKeyEvent, aType);
+        		}
+			case EKeyUpArrow:
+			case EKeyDownArrow:
+			    {
+			    	if(iEditMode != EDialogModeSettingEnforcement)
+				    {
+				    TRAPD(err ,CheckContentSettingL(aKeyEvent));//folder
+		         	User::LeaveIfError(err);
+				    }
+			    break;
+			    }
+            default:
+				{
+			    break;
+				}
+			}
+		}
+
+	return CAknDialog::OfferKeyEventL( aKeyEvent, aType);
+	}
+
+// ---------------------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::CheckContentSetting
+// modifies MSK and menu item depending on the item in the list box when touch events are handled
+// ----------------------------------------------------------------------------------------------
+//
+
+void CAspAdvanceSettingsDialog::CheckContentSettingL()
+{
+	TInt curIndex = ListBox()->CurrentItemIndex();
+	TInt count = iSettingList->Count();
+	CAspListItemData* lastItem = (*iSettingList)[--count];
+	
+
+		
+	CAspListItemData* curItem = GetItemForIndex(curIndex);
+	//TBool isPCSuite = CAspProfile::IsPCSuiteProfile(iProfile);
+	//if(isPCSuite && (curItem->iHidden == EVisibilityReadOnly))
+    if(curItem->iHidden == EVisibilityReadOnly)
+	{
+   		SetEmptyMiddleSoftKeyLabelL();
+   		return;
+	}
+	if(curItem->iItemId != EAspSyncContent)
+		{
+		if(iCommandSetId != R_ASP_CBA_OPTIONS_BACK_CHANGE || iMSKEmpty)
+			{
+			UpdateCbaL(R_ASP_CBA_OPTIONS_BACK_CHANGE);
+		
+			}
+		return;		
+		}
+	UpdateCbaL( R_ASP_CBA_OPTIONS_BACK_OPEN);
+
+}
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::CheckContentSetting
+// modifies MSK based on the item
+// ----------------------------------------------------------------------------
+//
+
+void CAspAdvanceSettingsDialog::CheckContentSettingL(const TKeyEvent& aKeyEvent)
+	{
+	
+	TInt curIndex = ListBox()->CurrentItemIndex();
+	TInt count = iSettingList->Count();
+	CAspListItemData* lastItem = (*iSettingList)[--count];
+	
+	switch (aKeyEvent.iCode)
+		{
+		case EKeyUpArrow:
+			{
+				if (curIndex)
+				{
+					curIndex--;
+				}
+				else
+				{
+				    curIndex = lastItem->iIndex;
+				}
+			break;
+			}
+		case EKeyDownArrow:
+			{
+				if (curIndex == lastItem->iIndex)
+				{
+				curIndex = 0;
+				}
+				else
+				{
+				curIndex++;
+				}
+			break;
+			}
+		}
+		
+	CAspListItemData* curItem = GetItemForIndex(curIndex);
+	//TBool isPCSuite = CAspProfile::IsPCSuiteProfile(iProfile);
+	//if(isPCSuite && (curItem->iHidden == EVisibilityReadOnly))
+	if(curItem->iHidden == EVisibilityReadOnly)
+	{
+   		SetEmptyMiddleSoftKeyLabelL();
+   		return;
+	}
+	if(curItem->iItemId != EAspSyncContent)
+		{
+		if(iCommandSetId != R_ASP_CBA_OPTIONS_BACK_CHANGE || iMSKEmpty)
+			{
+			UpdateCbaL(R_ASP_CBA_OPTIONS_BACK_CHANGE);
+		
+			}
+		return;		
+		}
+	UpdateCbaL( R_ASP_CBA_OPTIONS_BACK_OPEN);
+
+	}
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::HandleResourceChange
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::HandleResourceChange(TInt aType)
+    {   
+    if (aType == KEikDynamicLayoutVariantSwitch) //Handle change in layout orientation
+        {
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+        SetRect(mainPaneRect);
+        iSettingListBox->SetSize(mainPaneRect.Size());
+        CCoeControl::HandleResourceChange(aType);
+		DrawDeferred();
+	    return;
+		}
+		
+    if (aType == KAknsMessageSkinChange)
+        {
+        TRAP_IGNORE(SetIconsL());
+        }
+		
+    CCoeControl::HandleResourceChange(aType);
+    }
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::HandleOKL
+//
+//------------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::HandleOKL()
+	{
+	
+	CAspListItemData* item = GetItemForIndex(ListBox()->CurrentItemIndex());
+
+	if (item->iHidden == EVisibilityReadOnly)
+		{
+			if(iEditMode == EDialogModeSettingEnforcement)
+      		{
+    			TDialogUtil::ShowInformationNoteL(R_ASP_PROTECTED_SETTING);
+    		}
+     		else
+     		{
+			TDialogUtil::ShowInformationNoteL(R_ASP_NOTE_READ_ONLY);
+     		}
+		return;
+		}
+
+	if (EditSettingItemL(*item))
+		{
+		SetVisibility();
+		UpdateListBoxL(ListBox(), iSettingList);
+		}
+		
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::CreateSettingsListL
+// 
+// Function creates setting list array (iSettingsList).
+// Note: enum TAspConnectionSettings must match with string array
+// (R_ASP_CONNECTION_DIALOG_SETTING_ITEMS).
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::CreateSettingsListL()
+	{
+	// read setting headers from resource
+	CDesCArray* arr = iResHandler->ReadDesArrayLC(R_ADVANCE_SETTINGS_DIALOG_ITEMS);
+	
+	// add one CAspListItemData for each setting
+	AddItemL(ERoamingSettings, arr);
+
+	// write setting data into each CAspListItemData
+	TInt count=iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		InitSettingItemL((*iSettingList)[i]);
+		}
+
+	SetVisibility();  // find out what setting appear on UI
+
+	CleanupStack::PopAndDestroy(arr);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::AddItemL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::AddItemL(TInt aItemId, CDesCArray* aHeaders)
+	{
+    CAspListItemData* item = CAspListItemData::NewLC();
+	item->SetHeaderL((*aHeaders)[aItemId]);
+	item->iItemId = aItemId;
+	iSettingList->AppendL(item);
+	CleanupStack::Pop(item);
+	}
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::AddItemL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::AddItemL(TInt aItemId, TInt aResourceId)
+	{
+    CAspListItemData* item = CAspListItemData::NewLC();
+	item->SetHeaderL(aResourceId);
+	item->iItemId = aItemId;
+	iSettingList->AppendL(item);
+	CleanupStack::Pop(item);
+	}
+
+// ----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::UpdateListBoxL
+// 
+// Add settings headers into listbox.
+// ----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::UpdateListBoxL(CEikTextListBox* aListBox,
+                                       CAspSettingList* aItemList)
+	{
+	CDesCArray* arr = (CDesCArray*)aListBox->Model()->ItemTextArray();
+	arr->Reset();
+
+	TInt count = aItemList->Count();
+	for (TInt i=0; i<count; i++ )
+		{	
+		CAspListItemData* item = (*aItemList)[i];		
+		TInt aValue = 0;
+		ReadRepositoryL(KNSmlRoamingSettingKey, aValue);
+		if(aValue != ERoamingSettingBlock)
+		{
+		WriteRepositoryL(KNSmlRoamingSettingKey, item->iNumberData);
+		}
+		else
+		{
+		SetEmptyMiddleSoftKeyLabelL();
+		}
+		    		
+		TBool convert = ETrue;
+		if (item->iHidden != EVisibilityHidden)
+			{
+			HBufC* hBuf = item->ListItemTextL(convert);
+			CleanupStack::PushL(hBuf);
+			
+			arr->AppendL(hBuf->Des());
+			
+			// store listbox index (from zero up) into setting item 
+			item->iIndex = arr->Count() - 1;
+
+			CleanupStack::PopAndDestroy(hBuf);
+			}
+		else
+			{
+			item->iIndex = KErrNotFound;
+			}
+		}
+
+	ListBox()->HandleItemAdditionL();
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::SetVisibility
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::SetVisibility()
+	{
+    TInt aValue(0);
+    TRAPD(err ,ReadRepositoryL(KNSmlRoamingSettingKey, aValue));
+    if(aValue == ERoamingSettingBlock)
+    {
+	Item(ERoamingSettings)->iHidden = EVisibilityReadOnly;
+	}
+	else
+	{
+	Item(ERoamingSettings)->iHidden = EVisibilityNormal;
+	}
+	}
+
+void CAspAdvanceSettingsDialog::ReadRepositoryL(TInt aKey, TInt& aValue)
+    {
+    CRepository* rep = CRepository::NewLC(KCRUidNSmlDSApp);
+    TInt err = rep->Get(aKey, aValue);
+    User::LeaveIfError(err);
+    
+    CleanupStack::PopAndDestroy(rep);
+    }
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::InitSettingItemL
+// 
+// Constructs CAspListItemData for one connection setting.
+// -----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::InitSettingItemL(CAspListItemData* aItem)
+	{
+	__ASSERT_ALWAYS(aItem, TUtil::Panic(KErrGeneral));	
+	
+	iBuf = KNullDesC;  // reset common buffer
+	
+	switch (aItem->iItemId)
+		{		
+        case ERoamingSettings:
+            {
+            CDesCArray* arr = iResHandler->ReadDesArrayLC(R_ASP_ROAMING_SETTINGS);
+            TInt aValue(0);
+            ReadRepositoryL(KNSmlRoamingSettingKey, aValue);
+
+            if(aValue == ERoamingSettingBlock)
+                {
+                aItem->iNumberData = ERoamingSettingAlwaysAsk;
+                }
+            else
+                {
+                aItem->iNumberData = aValue;
+                }
+            //aItem->iNumberData = iProfile->SASyncState();
+            aItem->iResource = R_ASP_ROAMING_SETTINGS;
+            aItem->SetValueL((*arr)[aItem->iNumberData]);
+            aItem->iItemType = CAspListItemData::ETypeList;
+            
+            CleanupStack::PopAndDestroy(arr);
+            break;
+            }
+			
+        default:
+           	__ASSERT_DEBUG(EFalse, TUtil::Panic(KErrGeneral));
+			break;
+		
+		}
+	}
+	
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::EditSettingItemL
+//
+// Calls setting editing functions. 
+//------------------------------------------------------------------------------
+//
+TBool CAspAdvanceSettingsDialog::EditSettingItemL(CAspListItemData& aItem)
+	{
+	TInt ret = EFalse;
+	
+	switch (aItem.iItemType)
+		{
+
+		case CAspListItemData::ETypeList:
+			ret = EditSettingItemListL(aItem);
+		    break;
+		
+
+		default:
+		    break;
+		}
+	
+	return ret;
+	}
+
+//------------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::EditSettingItemListL
+//
+//------------------------------------------------------------------------------
+//
+TBool CAspAdvanceSettingsDialog::EditSettingItemListL(CAspListItemData& aItem)
+	{
+	TInt curSelection = aItem.iNumberData;
+	CDesCArray* arr = CAspResHandler::ReadDesArrayStaticLC(aItem.iResource);
+	
+	TBool ret = TDialogUtil::ShowListEditorL(arr, aItem.Header(), curSelection);
+	if (ret)
+		{
+		aItem.iNumberData = curSelection; 
+		aItem.SetValueL((*arr)[curSelection]);
+		}
+
+	CleanupStack::PopAndDestroy(arr);
+	return ret;
+	}
+
+//-----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::GetItemForIndex
+// 
+// Find item in list position aIndex.
+//-----------------------------------------------------------------------------
+//
+CAspListItemData* CAspAdvanceSettingsDialog::GetItemForIndex(TInt aIndex)
+	{
+	CAspListItemData* item = NULL;
+	
+	TInt count = iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CAspListItemData* temp = (*iSettingList)[i];
+		if (temp->iIndex == aIndex)
+			{
+			item = temp;
+			break;
+			}
+		}
+
+	__ASSERT_ALWAYS(item, TUtil::Panic(KErrGeneral));
+
+    return item;
+	}
+
+
+//-----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::Item
+// 
+// Find item with aItemId (TAspConnectionSettingItem).
+//-----------------------------------------------------------------------------
+//
+CAspListItemData* CAspAdvanceSettingsDialog::Item(TInt aItemId)
+	{
+	CAspListItemData* item = NULL;
+
+	TInt count = iSettingList->Count();
+	for (TInt i=0; i<count; i++)
+		{
+		CAspListItemData* temp = (*iSettingList)[i];
+		if (temp->iItemId == aItemId)
+			{
+			item = temp;
+			break;
+			}
+		}
+	
+	__ASSERT_ALWAYS(item, TUtil::Panic(KErrGeneral));
+
+    return item;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::ListBox
+// 
+// -----------------------------------------------------------------------------
+//
+CAknSettingStyleListBox* CAspAdvanceSettingsDialog::ListBox()
+	{
+	return iSettingListBox;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::UpdateCbaL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::UpdateCbaL(TInt aResourceId)
+	{
+	CEikButtonGroupContainer& cba = ButtonGroupContainer();
+	cba.SetCommandSetL(aResourceId);
+	iCommandSetId = aResourceId;
+	iMSKEmpty = EFalse;
+	cba.DrawDeferred();
+	}
+
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::UpdateMenuL
+// 
+// -----------------------------------------------------------------------------
+//
+
+void CAspAdvanceSettingsDialog::UpdateMenuL(TInt aResource)
+	{
+	CEikMenuBar* menuBar = iMenuBar; // from CAknDialog
+	menuBar->SetMenuTitleResourceId(aResource);
+
+	TRAPD(err, menuBar->TryDisplayMenuBarL());
+    		
+	User::LeaveIfError(err);
+	
+			
+	}
+	
+// -----------------------------------------------------------------------------
+// CAspAdvanceSettingsDialog::UpdateMenuL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspAdvanceSettingsDialog::WriteRepositoryL(TInt aKey, const TInt& aValue)
+    {
+    const TUid KCRRoamingSettingUID = {0x101F9A1D};
+    const TUid KRepositoryId = KCRRoamingSettingUID;
+
+    CRepository* rep = CRepository::NewLC(KRepositoryId);
+    TInt err = rep->Set(aKey, aValue);
+    User::LeaveIfError(err);
+    
+    CleanupStack::PopAndDestroy(rep);
+    }
+//  End of File