omads/omadsappui/AspSyncUtil/src/AspSettingDialog.cpp
changeset 0 dab8a81a92de
child 1 95fdac6ccb5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsappui/AspSyncUtil/src/AspSettingDialog.cpp	Mon Nov 23 14:46:41 2009 +0200
@@ -0,0 +1,2930 @@
+/*
+* 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 <AknIconArray.h>   // for GulArray
+#include <aknconsts.h>      // for KAvkonBitmapFile
+
+#include "AspSettingDialog.h"
+#include "AspProfileDialog.h"
+#include "AspScheduleDialog.h"
+#include "AspSchedule.h"
+#include "AspDialogUtil.h"
+#include "AspLogDialog.h"
+#include "AspUtil.h"
+#include "AspProfileWizardDialog.h"
+#include "AspDebug.h"
+#include "AspSyncUtil.rh"
+#include "AspAdvanceSettingsDialog.h"
+
+#include <aknsettingitemlist.h>
+
+#include <csxhelp/ds.hlp.hrh>  // for help text ids
+
+#ifndef RD_DSUI_TIMEDSYNC 
+#include <avkon.mbg>
+#else
+#include "AspSettingViewDialog.h"
+#endif
+#include <DataSyncInternalPSKeys.h>
+#include "AspAutoSyncHandler.h"
+#include <featmgr.h>   // FeatureManager
+
+const TInt KMSKControlId( CEikButtonGroupContainer::EMiddleSoftkeyPosition );
+
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+
+
+
+/******************************************************************************
+ * class CAspSettingDialog
+ ******************************************************************************/
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowDialogL
+// 
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::ShowDialogL(TAspParam& aParam)
+	{
+    CAspSettingDialog* dialog = CAspSettingDialog::NewL(aParam);
+
+	TBool ret = dialog->ExecuteLD(R_ASP_SETTING_DIALOG);
+
+	return ret;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::NewL
+//
+// -----------------------------------------------------------------------------
+//
+CAspSettingDialog* CAspSettingDialog::NewL(TAspParam& aParam)
+    {
+    FLOG( _L("CAspSettingDialog::NewL START") );
+
+    CAspSettingDialog* self = new (ELeave) CAspSettingDialog(aParam);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    FLOG( _L("CAspSettingDialog::NewL END") );
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::CAspSettingDialog
+// 
+// -----------------------------------------------------------------------------
+//
+CAspSettingDialog::CAspSettingDialog(TAspParam& aParam) 
+    {
+	iApplicationId = aParam.iApplicationId;
+	iSyncSession = aParam.iSyncSession;
+	iDialogMode = aParam.iMode;
+	
+	iCurrentProfileId = KErrNotFound;
+	iCurrentProfileName = KNullDesC;
+	
+	__ASSERT_ALWAYS(iSyncSession, TUtil::Panic(KErrGeneral));
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ConstructL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ConstructL()
+    {
+    FLOG( _L("CAspSettingDialog::ConstructL START") );
+
+    CAknDialog::ConstructL(R_ASP_SETTING_DIALOG_MENU);
+    
+    iSettingEnforcement = TUtil::SettingEnforcementState();
+
+	TAspParam param(iApplicationId, iSyncSession);
+	iProfileList = CAspProfileList::NewL(param);
+	iProfileList->ReadAllProfilesL(CAspProfileList::ENoMandatoryCheck);
+	iProfileList->Sort();
+	
+    param.iMode = CAspContentList::EInitDataProviders;
+	iContentList = CAspContentList::NewL(param);
+	
+	// get previous title so it can be restored
+	iStatusPaneHandler = CStatusPaneHandler::NewL(iAvkonAppUi);
+	iStatusPaneHandler->StoreOriginalTitleL();
+	
+#ifdef RD_DSUI_TIMEDSYNC 
+
+    iTabHandler = new (ELeave) CAspTabbedNaviPaneHandler(iAvkonAppUi->StatusPane() ,this);
+	iUpdateTabGroup = ETrue;
+
+#else
+	// store current navi pane
+	iStatusPaneHandler->StoreNavipaneL();
+	
+#endif
+	
+	
+
+	iResHandler = CAspResHandler::NewL();
+
+	// start listening sync database events
+	iDbNotifier = CAspDbNotifier::NewL(param, this);
+	iDbNotifier->RequestL();
+	
+	iPopupNote = CAknInfoPopupNoteController::NewL();
+    iBearerHandler = CAspBearerHandler::NewL(param);
+
+	SetCurrentProfileL();
+	
+	FLOG( _L("CAspSettingDialog::ConstructL END") );
+    } 
+
+
+// -----------------------------------------------------------------------------
+// Destructor
+//
+// -----------------------------------------------------------------------------
+//
+CAspSettingDialog::~CAspSettingDialog()
+    {
+    FLOG( _L("CAspSettingDialog::~CAspSettingDialog START") );
+
+	delete iProfileList;
+	delete iContentList;
+	
+	delete iStatusPaneHandler;
+	delete iResHandler;
+	
+	delete iDbNotifier;
+	iDbNotifier = NULL;
+	
+	delete iSyncHandler;   // created when sync is started
+	
+	if (iAvkonAppUi)
+		{
+		iAvkonAppUi->RemoveFromStack(this);
+		}
+
+	if (iPopupNote)
+		{
+    	iPopupNote->HideInfoPopupNote();
+	    delete iPopupNote;
+		}
+
+	delete iBearerHandler;
+
+#ifdef RD_DSUI_TIMEDSYNC
+
+	delete iTabHandler;
+#endif
+
+	FLOG( _L("CAspSettingDialog::~CAspSettingDialog END") );
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspSettingDialog::ActivateL (from CCoeControl)
+//
+// Called by system when dialog is activated
+//------------------------------------------------------------------------------
+//
+void CAspSettingDialog::ActivateL()
+	{
+    CAknDialog::ActivateL();
+
+	// this cannot be in ConstructL which is executed before dialog is launched
+	iAvkonAppUi->AddToStackL(this);
+    }
+
+
+//------------------------------------------------------------------------------
+// CAspSettingDialog::GetHelpContext
+//
+//
+//------------------------------------------------------------------------------
+//
+void CAspSettingDialog::GetHelpContext(TCoeHelpContext& aContext) const
+	{
+	aContext.iMajor = KUidSmlSyncApp;
+	aContext.iContext = KDS_HLP_MAIN_VIEW;    
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspSettingDialog::ProcessCommandL
+//
+// Handle commands from menu.
+//------------------------------------------------------------------------------
+//
+void CAspSettingDialog::ProcessCommandL(TInt aCommandId)
+	{
+	TInt err = KErrNone;
+
+    // prevent db notifications while processing menu command
+	//Notifier()->SetDisabled(ETrue);
+	TRAP(err, DoProcessCommandL(aCommandId));
+	//Notifier()->SetDisabled(EFalse);
+	
+	if (err != KErrNone)
+		{
+		iDbNotifier->CheckUpdateEventL();
+		FLOG( _L("### CAspSettingDialog::ProcessCommandL failed (%d) ###"), err );
+		User::Leave(err);
+		}
+	}
+
+
+//------------------------------------------------------------------------------
+// CAspSettingDialog::DoProcessCommandL
+//
+// Handle commands from menu.
+//------------------------------------------------------------------------------
+//
+void CAspSettingDialog::DoProcessCommandL(TInt aCommandId)
+	{
+	HideMenu();
+
+	switch (aCommandId)
+		{
+        case EAspMenuCmdSync:
+			{
+			SyncProfileL();
+			break;
+			}
+		case EAspMenuCmdCopyFromServer:
+			{
+			CopyFromServerL();
+			break;
+			}
+        case EAspMenuCmdChangeProfile:
+			{
+			ChangeProfileL();
+			break;
+			}
+        case EAspMenuCmdEdit:
+			{
+			EditProfileL(EDialogModeEdit ,KErrNotFound);
+			break;
+			}
+        case EAspMenuCmdNewSet:
+			{
+			CreateProfileL();
+			break;
+			}
+		case EAspMenuCmdDelete:
+			{
+			DeleteProfileL();
+	   		break;
+			}
+		case EAspMenuCmdViewLog:
+			{
+			ShowLogDialogL();
+			break;
+			}
+		case EAspMenuCmdAutoSync:
+			{
+			ShowAutoSyncDialogL();
+			break;
+			}
+		case EAspMenuCmdAdvanceSettings:
+		    {
+		    //CAspAdvanceSettingsDialog* dialog = CAspAdvanceSettingsDialog::NewL();
+		    //CleanupStack::PushL(dialog);
+		        
+		    CAspAdvanceSettingsDialog::ShowDialogL();
+		        
+		    //CleanupStack::PopAndDestroy(dialog);
+
+		    //ShowContextMenuL(R_ASP_ROAMING_SETTINGS_CONTEXT_MENU);
+		    break;
+		    }
+        case EAspMenuCmdRoamingSettings:
+            {
+            ShowContextMenuL(R_ASP_ROAMING_SETTINGS_CONTEXT_MENU);
+            break;
+            }		
+
+		case EAspMenuCmdMark:
+		case EAspMenuCmdUnmark:
+			{
+			SaveSelectionL();
+			break;	
+			}
+    case EAknCmdHelp:
+			{
+            TUtil::LaunchHelpAppL(iEikonEnv);
+			break;
+		  }
+
+        case EAspMenuCmdExit:
+        case EAknCmdExit:
+        case EEikCmdExit:
+			{
+   		
+            //
+			// Exit dialog
+			//
+			// CEikAppUi::ProcessCommandL starts CAknAppShutter that 
+			// closes all dialogs and finally calling application. Before 
+			// dialog is closed (deleted) it's OkToExitL(EEikBidCancel)
+			// is called. EEikBidCancel means OkToExitL must silently
+			// save and return ETrue.
+			//
+			iAvkonAppUi->ProcessCommandL(EAknCmdExit);
+
+			break;
+			}
+
+		default:
+			{
+			break;
+			}
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::OkToExitL
+//
+// Called by framework before dialog is closed.
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::OkToExitL(TInt aButtonId)
+    {
+    
+	// Options/Exit, End key, Close key ('c')
+	if (aButtonId == EEikBidCancel)
+		{
+		// framework calls this when dialog must shut down
+    	return ETrue;
+		}
+
+	// Back key (cba)
+	if (aButtonId == EAknSoftkeyBack)
+        {
+		return ETrue;
+		}
+
+    // Exit key (cba)
+	if (aButtonId == EAknSoftkeyExit)
+        {
+        if (iDialogMode == EModeDialogNoWait && iApplicationId == EApplicationIdSync)
+        	{
+            //  close sync app
+        	iAvkonAppUi->ProcessCommandL(EAknCmdExit);
+        	}
+
+        return ETrue;
+		}
+		
+	if (aButtonId == EAknSoftkeyMark || aButtonId == EAknSoftkeyUnmark 
+		|| aButtonId == EAknSoftkeyOpen)  // MSK
+        {
+
+		if (iProfileList->Count() == 0)
+			{
+			return EFalse;
+			}
+        
+        if (IsProfileLockedL(iCurrentProfileId))
+        	{
+        	TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+			CancelCheckboxEvent();
+			return EFalse;
+			}
+        
+        if (iSettingEnforcement)
+			{
+			TDialogUtil::ShowInformationNoteL(R_ASP_PROTECTED_SETTING);
+			return EFalse;  // leave dialog open;
+			}
+        
+        if (!CheckEmailSelection())
+        	{
+        	return EFalse;  // leave dialog open;
+        	}
+				
+		TInt ret =  SaveCurrentProfile();
+		if (ret != KErrNone)
+			{
+			CancelCheckboxEvent();
+			}
+			
+		return EFalse;  // leave dialog open
+		}
+		
+
+	return CAknDialog::OkToExitL(aButtonId);
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::CancelMailBoxForEnterL
+// 
+// ----------------------------------------------------------------------------
+//
+
+void CAspSettingDialog::CancelMailBoxForEnterL()
+{
+	CListBoxView* view = iSettingListBox->View();
+	
+    TInt index = view->CurrentItemIndex();
+    TAspProviderItem& item = iContentList->ProviderItem(index);
+    TBool selected = view->ItemIsSelected(index);
+    
+    if(selected)
+    {
+        view->DeselectItem(index);
+    }
+    else
+    {
+    	view->SelectItemL(index);
+    }   
+    
+}
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::OfferKeyEventL
+// 
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CAspSettingDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	if (aType == EEventKey)
+		{
+		switch (aKeyEvent.iCode)
+			{
+			//case EKeyOK:
+			//	{
+			//	ShowContextMenuL(R_ASP_SETTING_DIALOG_CONTEXT_MENU);
+			//	return EKeyWasConsumed;
+			//	}
+			case EKeyEnter:
+			{
+                   CancelMailBoxForEnterL();
+                   OkToExitL(EAknSoftkeyOpen);
+                   return EKeyWasConsumed;
+			}
+
+			case EKeyEscape:  // framework calls this when dialog must shut
+				{
+				return CAknDialog::OfferKeyEventL(aKeyEvent, aType);
+        		}
+        		
+			//case EStdKeyHome:
+			//	{
+			//	DeleteSelectedProfileL();
+			//	return EKeyWasConsumed;
+			//	}
+
+#ifdef RD_DSUI_TIMEDSYNC 
+
+			case EKeyLeftArrow:
+				{
+				SetPreviousProfileL();
+				return EKeyWasConsumed;
+				}
+
+			case EKeyRightArrow:
+				{
+				SetNextProfileL();
+				return EKeyWasConsumed;
+				}
+
+#endif
+            default:
+			    break;
+			}
+		}
+
+	return CAknDialog::OfferKeyEventL( aKeyEvent, aType);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::HandleResourceChange
+// 
+// ----------------------------------------------------------------------------
+//
+
+void CAspSettingDialog::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);
+    }
+
+/*
+void CAspSettingDialog::HandleResourceChange(TInt aType)
+    {   
+    if (aType == KEikDynamicLayoutVariantSwitch) //Handle change in layout orientation
+        {
+  
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+        TBuf<299> buf;
+        buf.Format(_L("(%d,%d) (%d,%d)"), mainPaneRect.iTl.iX, mainPaneRect.iTl.iY, mainPaneRect.iBr.iX, mainPaneRect.iBr.iY);
+
+        SetRect(mainPaneRect);
+        iSettingListBox->HandleResourceChange(aType);
+		DrawNow();
+  
+        
+        CAknDialog::HandleResourceChange(aType);
+        
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+        SetRect(mainPaneRect);
+        
+        iSettingListBox->SetSize(mainPaneRect.Size());
+        //iSettingListBox->HandleResourceChange(aType);
+        CCoeControl::HandleResourceChange(aType);
+		DrawDeferred();
+		
+		
+	    return;
+		}
+		
+    if (aType == KAknsMessageSkinChange)
+        {
+        TRAP_IGNORE(SetIconsL());
+        }
+        
+    CCoeControl::HandleResourceChange(aType);
+    }
+*/
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::SetIconsL
+//
+// ----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SetIconsL()
+    {
+    if (!iSettingListBox)
+    	{
+    	return;
+    	}
+ 
+ 	TFileName bitmapName;
+	CAspResHandler::GetBitmapFileName(bitmapName);
+	CArrayPtr<CGulIcon>* icons = new (ELeave) CAknIconArray(KDefaultArraySize);
+	CleanupStack::PushL(icons);
+	
+	// NOTE: icons must be appended in correct order (TAspSettingDialogIconIndex)
+	icons->AppendL(IconL(KAknsIIDQgnPropCheckboxOn, KAvkonBitmapFile, 
+	                     EMbmAvkonQgn_prop_checkbox_on,
+	                     EMbmAvkonQgn_prop_checkbox_on_mask));
+	                     
+	icons->AppendL(IconL(KAknsIIDQgnPropCheckboxOff, KAvkonBitmapFile,
+	                     EMbmAvkonQgn_prop_checkbox_off,
+	                     EMbmAvkonQgn_prop_checkbox_off_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);
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::ShowContextMenuL
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ShowContextMenuL(TInt aResource)
+	{
+	if (SyncRunning())
+		{
+		return;
+		}
+	
+	//
+	// Switch to Context specific options menu,
+	// Show it and switch back to main options menu.
+	// 
+	CEikMenuBar* menuBar = iMenuBar; // from CAknDialog
+	menuBar->SetMenuTitleResourceId(aResource);
+
+
+	// TRAP displaying of menu bar.
+	// If it fails, the correct resource is set back before leave.
+	TRAPD(err, menuBar->TryDisplayMenuBarL());
+	
+	menuBar->SetMenuTitleResourceId(R_ASP_SETTING_DIALOG_MENU);
+		
+	User::LeaveIfError(err);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::PostLayoutDynInitL
+//
+// Called by framework after dialog is shown.
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::PostLayoutDynInitL()
+	{
+	#ifdef RD_DSUI_TIMEDSYNC
+	ShowAutoSyncProfileInfo();
+	#else
+  ShowCurrentProfileInfo();
+  #endif
+	}
+	
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::PreLayoutDynInitL
+//
+// Called by framework before dialog is shown.
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::PreLayoutDynInitL()
+    {
+    iSettingListBox = (CAknDoubleLargeStyleListBox*) ControlOrNull (EAspSettingDialogList);
+    
+   	__ASSERT_ALWAYS(iSettingListBox, TUtil::Panic(KErrGeneral));
+	
+	iSettingListBox->SetListBoxObserver(this);
+	iSettingListBox->CreateScrollBarFrameL(ETrue);
+	iSettingListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+	                 CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+	
+	SetIconsL();
+	UpdateListBoxL();
+
+#ifdef RD_DSUI_TIMEDSYNC 
+
+	UpdateTabsL();
+#else
+
+	UpdateNavipaneL(iCurrentProfileName);
+#endif
+
+	
+	iSettingListBox->UpdateScrollBarsL();
+	iSettingListBox->ScrollBarFrame()->MoveVertThumbTo(0);
+
+	iStatusPaneHandler->SetTitleL(R_ASP_SETTING_DIALOG_TITLE);
+
+	SetCurrentIndex();
+//#ifdef RD_DSUI_CP_INTEGRATION
+	TBool flag = CEikonEnv::Static()->StartedAsServerApp() ;
+	if (flag || iApplicationId != EApplicationIdSync)
+/*#else
+	if (iApplicationId != EApplicationIdSync)
+#endif */
+		{
+		UpdateCbaL(R_ASP_CBA_OPTIONS_BACK_MARK);
+		}
+		
+	if(iSettingEnforcement)
+	{
+		UpdateMiddleSoftKeyLabelL(EAknSoftkeyOpen,R_TEXT_SOFTKEY_EMPTY);	
+   	}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DynInitMenuPaneL
+//
+// Called by framework before menu is shown.
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DynInitMenuPaneL(TInt aResourceID, 	CEikMenuPane* aMenuPane)
+	{
+	TInt menu1 = R_ASP_SETTING_DIALOG_MENU_PANE;
+	TInt menu2 = R_ASP_SETTING_DIALOG_CONTEXT_MENU_PANE;
+	
+    if (aResourceID != menu1 && aResourceID != menu2)
+		{
+		return; // not one of our menus
+		}
+
+	if (aResourceID == R_ASP_SETTING_DIALOG_CONTEXT_MENU_PANE)
+		{
+		InitContextMenuL(aMenuPane); // separate handling for context menu
+		}
+	else
+		{
+		InitOptionsMenuL(aMenuPane);
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::InitContextMenuL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::InitContextMenuL(CEikMenuPane* /*aMenuPane*/)
+	{
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::InitOptionsMenuL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::InitOptionsMenuL(CEikMenuPane* aMenuPane)
+	{
+	TInt profileCount = iProfileList->Count();
+	TInt providerCount = iContentList->ProviderCount();
+	TInt deletableProfileCount = iProfileList->DeletableProfileCount();
+	
+	if (providerCount == 0)  // no data providers
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdSync);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdNewSet);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdEdit);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChangeProfile);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdDelete);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdAutoSync);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdViewLog);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdCopyFromServer);
+		return;
+    	}
+	
+	
+	// Options/Sync
+	// Options/Copy all from server
+	if (iCurrentProfileId == KErrNotFound && profileCount > 0)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdSync);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdCopyFromServer);
+		}
+	if (iSettingEnforcement && profileCount == 0)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdSync);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdCopyFromServer);
+		}
+
+	if (iCurrentProfileId == KErrNotFound)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdCopyFromServer);
+		}
+
+	// Options/Change
+	if (profileCount == 0)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChangeProfile);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdMark);
+	    TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdUnmark);	 
+		}
+	if (profileCount == 1 && iCurrentProfileId != KErrNotFound)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChangeProfile);
+		}
+	
+	// Options/Edit
+	if (iCurrentProfileId == KErrNotFound)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdEdit);
+		}
+	
+	// Options/Auto sync
+	if (iCurrentProfileId == KErrNotFound)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdAutoSync);
+		}
+
+	// Options/New
+	if (iSettingEnforcement)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdNewSet);
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdMark);
+	    TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdUnmark);	 
+		}
+
+	// Options/Delete   
+   if (IsSyncOnGoingL(iCurrentProfileId) || iSettingEnforcement 
+   										|| deletableProfileCount == 0)
+    	{
+    	TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdDelete);
+     	}
+	
+	// Options/View log
+	if (iCurrentProfileId == KErrNotFound)
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdViewLog);
+		}
+	
+	if (!FeatureManager::FeatureSupported(KFeatureIdHelp))
+		{
+		TDialogUtil::DeleteMenuItem(aMenuPane, EAknCmdHelp);
+		}
+		
+#ifdef RD_DSUI_TIMEDSYNC 
+	if(profileCount)
+		{
+	 	//Delete active profile
+	 	TAspParam param(iApplicationId, iSyncSession);
+	 	TAspProfileItem& currentProfile = CurrentProfileL();
+	 	if(!currentProfile.iDeleteAllowed)
+	 		{
+	    	TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdDelete);
+			}
+	 	//Change profile option is removed
+	 	TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdChangeProfile);
+	 	
+
+	 	CAspSchedule* schedule = CAspSchedule::NewLC();
+	 	TInt asProfileId = schedule->AutoSyncProfileId();
+	 	if (iCurrentProfileId == schedule->ProfileId()
+	 							&& asProfileId != KErrNotFound)
+			{
+			CAspProfile* asProfile = CAspProfile::NewLC(param);
+			asProfile->OpenL(asProfileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+			if (!asProfile->IsSynced() && !currentProfile.iSynced)
+				{
+				TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdViewLog);
+				}
+			CleanupStack::PopAndDestroy(asProfile);
+			}
+	 	else
+			{
+			if (!currentProfile.iSynced)
+		    	{
+	        	TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdViewLog);
+		    	}
+
+			}
+		 CleanupStack::PopAndDestroy(schedule);
+		}
+#else
+	 
+	 
+	 TAspProfileItem& profile = CurrentProfileL();
+     if (!profile.iSynced)
+		 {
+	         iProfileList->ReadProfileL(iCurrentProfileId);
+	       }
+	  
+	   if (!profile.iSynced)
+	           {
+	     TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdViewLog);
+		 }
+#endif
+if(!iSettingEnforcement)
+{
+	UpdateMarkMenuItem(aMenuPane);
+}
+#ifndef RD_DSUI_TIMEDSYNC
+     TDialogUtil::DeleteMenuItem(aMenuPane, EAspMenuCmdAutoSync);
+#endif
+
+	}
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::IsSyncOnGoing
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::IsSyncOnGoingL(TInt aProfileId)
+	{
+	TInt currentJobId = CAspProfile::CurrentJob(iSyncSession);
+	if (currentJobId != KErrNotFound)
+			{
+			RSyncMLDataSyncJob syncJob;
+			syncJob.OpenL(*iSyncSession, currentJobId);
+			if (syncJob.Profile() == aProfileId)
+				{
+				syncJob.Close();
+				return ETrue;
+				}
+			syncJob.Close();
+			}
+	return EFalse;
+	}
+
+	
+#ifdef RD_DSUI_TIMEDSYNC 
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SetNextProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SetNextProfileL()
+	{
+    FLOG( _L("CAspSettingDialog::SetNextProfileL START") );
+
+	if (iProfileList->Count() == 0)
+		{
+		return;
+		}
+    
+    TInt currentIndex = iProfileList->ListIndex(iCurrentProfileId);
+    if (currentIndex == KErrNotFound)
+    	{
+    	FLOG( _L("CAspSettingDialog::SetNextProfileL END") );
+    	
+    	User::Leave(KErrNotFound);
+    	}
+    
+    TInt newIndex = 0;
+    TInt count = iProfileList->Count();
+    if (currentIndex >= count-1)
+        {
+        newIndex = 0;
+        }
+    else
+        {
+        newIndex = currentIndex + 1;
+        }
+    TAspProfileItem& olditem = iProfileList->Item(currentIndex);        
+    TAspProfileItem& item = iProfileList->Item(newIndex);
+
+	if (item.iProfileName.Compare(KAutoSyncProfileName) == 0)
+			{
+			if(newIndex >= count-1)
+				{
+				newIndex = 0;
+				}
+			else
+				{
+				newIndex++;
+				}
+			TAspProfileItem& newItem = iProfileList->Item(newIndex);
+			SetCurrentProfile(newItem.iProfileId);
+			}
+	else 
+		{
+		SetCurrentProfile(item.iProfileId);
+		}
+	
+	//ShowCurrentProfileInfo();
+    UpdateListBoxL();
+	//UpdateNavipaneL(iCurrentProfileName);
+    UpdateTabsL();
+        
+    FLOG( _L("CAspSettingDialog::SetNextProfileL END") );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SetPreviousProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SetPreviousProfileL()
+	{
+    FLOG( _L("CAspSettingDialog::SetPreviousProfileL START") );
+
+	if (iProfileList->Count() == 0)
+		{
+		return;
+		}
+    
+    TInt currentIndex = iProfileList->ListIndex(iCurrentProfileId);
+    if (currentIndex == KErrNotFound)
+    	{
+    	FLOG( _L("CAspSettingDialog::SetNextProfileL END") );
+    	
+    	User::Leave(KErrNotFound);
+    	}
+    
+    TInt newIndex = 0;
+    TInt count = iProfileList->Count();
+    if (currentIndex == 0)
+        {
+        newIndex = count - 1;
+        }
+    else
+        {
+        newIndex = currentIndex - 1;
+        }
+   
+    TAspProfileItem& item = iProfileList->Item(newIndex);
+
+	if (item.iProfileName.Compare(KAutoSyncProfileName) == 0)
+		{
+		if(newIndex == 0)
+			{
+				newIndex = count - 1;
+			}
+		else
+			{
+				newIndex--;
+			}
+			TAspProfileItem& newItem = iProfileList->Item(newIndex);
+			SetCurrentProfile(newItem.iProfileId);
+		}
+	else
+		{
+		 SetCurrentProfile(item.iProfileId);	
+		}
+
+   
+	//ShowCurrentProfileInfo();
+    UpdateListBoxL();
+	//UpdateNavipaneL(iCurrentProfileName);
+	UpdateTabsL();
+
+    FLOG( _L("CAspSettingDialog::SetPreviousProfileL END") );
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateTabsL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::UpdateTabsL()
+	{
+    FLOG( _L("CAspSettingDialog::UpdateTabsL START") );
+
+	TInt count = iProfileList->Count();
+	if (count == 0)
+		{
+		//handle no profile condition
+		iTabHandler->DeleteTabsL();
+		_LIT(KEmpty, " ");
+		TBuf<64> tabText(KEmpty);
+		TInt profileId = KMaxProfileCount;
+		iTabHandler->AddTabL(tabText, profileId);
+		iTabHandler->SetActiveTabL(profileId);
+		return;
+		}
+
+	if (iTabHandler->TabIndex(iCurrentProfileId) == KErrNotFound)
+		{
+		iUpdateTabGroup = ETrue;
+		}
+	if (iUpdateTabGroup)
+		{
+		//update changed settings
+	    iProfileList->ReadAllProfilesL(CAspProfileList::ENoMandatoryCheck);
+		iProfileList->Sort();
+    	SetCurrentProfile(iCurrentProfileId);
+		count = iProfileList->Count();
+		iTabHandler->DeleteTabsL();
+        for (TInt i=0; i<count; i++)
+        	{
+        	TAspProfileItem& item = iProfileList->Item(i);
+			iTabHandler->AddTabL(item.iProfileName, item.iProfileId);
+    		}
+    	iTabHandler->SetTabWidthL();
+		iUpdateTabGroup = EFalse;		
+		}
+	if (iCurrentProfileId != KErrNotFound)
+		{
+		iTabHandler->SetTabTextL(iCurrentProfileName, iCurrentProfileId);	
+		}
+	CAspSchedule* schedule = CAspSchedule::NewLC();
+	if (iCurrentProfileId == schedule->ProfileId()
+							 && schedule->IsAutoSyncEnabled())
+		{
+		//show indicator icon for profile that has auto sync ON.
+		_LIT(KSpace,"  ");
+		TBuf<64> tabText;
+		tabText.Append(KClockCharacter);//Unicode character U+F815 (clock)
+		tabText.Append(KSpace);
+		tabText.Append(iCurrentProfileName);
+		iTabHandler->SetTabTextL(tabText, iCurrentProfileId);
+		}
+		
+	if (iCurrentProfileId != KErrNotFound)
+        {
+        iTabHandler->SetActiveTabL(iCurrentProfileId);    
+        }
+
+	CleanupStack::PopAndDestroy(schedule);
+	
+	
+    FLOG( _L("CAspSettingDialog::UpdateTabsL END") );
+	}
+
+#endif
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateMarkMenuItem
+//
+// -----------------------------------------------------------------------------
+//
+
+void CAspSettingDialog::UpdateMarkMenuItem(CEikMenuPane* aMenuPane)
+	{
+	
+	CListBoxView* view = iSettingListBox->View();
+    
+    TInt index = view->CurrentItemIndex();
+    TBool mark = view->ItemIsSelected(index);
+	
+	aMenuPane->SetItemDimmed(EAspMenuCmdMark,mark);
+	aMenuPane->SetItemDimmed(EAspMenuCmdUnmark,!mark);
+		
+	}
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SaveSelection
+// Update Mark/Unmark selected from menu 
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SaveSelectionL()
+{
+    if (IsProfileLockedL(iCurrentProfileId))
+       	{
+       	TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+		return;
+		}
+       
+       if (iSettingEnforcement)
+		{
+		TDialogUtil::ShowInformationNoteL(R_ASP_PROTECTED_SETTING);
+		return; 
+		}
+		
+	//update check box & profile
+    CListBoxView* view = iSettingListBox->View();
+    
+    TInt index = view->CurrentItemIndex();
+    TBool selected = view->ItemIsSelected(index);
+    if (selected)
+    	{
+        view->DeselectItem(index);
+       	}
+    else
+    	{
+    	view->SelectItemL(index);
+    	}
+    iSettingListBox->SetCurrentItemIndex(index);
+    if (!CheckEmailSelection())
+       	{
+       	return; 
+       	}
+	TInt ret =  SaveCurrentProfile();
+	if (ret != KErrNone)
+		{
+		CancelCheckboxEvent();
+		}
+	
+}
+
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DoSetCurrentProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DoSetCurrentProfileL(TInt aProfileId)
+	{
+    FLOG( _L("CAspSettingDialog::DoSetCurrentProfileL START") );
+    
+    iCurrentProfileId = KErrNotFound;
+    iCurrentProfileName = KNullDesC;
+    iContentList->RemoveAllTasks();
+    iProfileList->ReadAllProfilesL(CAspProfileList::ENoMandatoryCheck);
+	iProfileList->Sort();
+	
+	if (iProfileList->Count() == 0)
+		{
+		return;
+		}
+        
+    if (aProfileId == KErrNotFound)
+    	{
+    	FLOG( _L("CAspSettingDialog::DoSetCurrentProfileL END") );
+    	User::Leave(KErrNotFound);
+    	}
+    	
+    TInt index = iProfileList->ListIndex(aProfileId);
+    if (index == KErrNotFound)
+    	{
+    	FLOG( _L("### unknown profile (id=%d) ###"), aProfileId );
+    	FLOG( _L("CAspSettingDialog::DoSetCurrentProfileL END") );
+    	
+    	User::Leave(KErrNotFound);
+    	}
+    
+    TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+	
+	//if profile already locked ,open as read only
+	if (IsProfileLockedL(aProfileId))
+	{
+	   profile->OpenL(aProfileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+    
+	}
+	else
+	{
+	   profile->OpenL(aProfileId, CAspProfile::EOpenReadWrite, CAspProfile::EAllProperties);
+	}
+	
+    iContentList->SetProfile(profile);
+    
+    // read sync tasks from database into content list
+    iContentList->InitAllTasksL();
+    if (IsProfileLockedL(aProfileId))
+    {
+    	iContentList->UpdateLocalDatabaseL();
+    }
+    
+    if (!iContentList->CheckTaskDirectionsL())
+       	{
+        if (!iSettingEnforcement)
+           	{
+           	iContentList->ModifyTaskDirectionsL(ESyncDirectionTwoWay);
+    	   	}
+    	   	
+    	FLOG( _L("### sync direction conflict ###") );
+    	}
+    
+    //check if mailbox exists
+    CDesCArray* localDataStores = new (ELeave) CDesCArrayFlat(KDefaultArraySize);
+	CleanupStack::PushL(localDataStores);
+	iContentList->GetLocalDatabaseList(KUidNSmlAdapterEMail.iUid, localDataStores);
+
+    TInt num = profile->ProtocolVersion();
+    if (num == EAspProtocol_1_1 || localDataStores->Count() == 0)
+    	{
+    	TInt index = iContentList->FindTaskIdForProvider( KUidNSmlAdapterEMail.iUid);
+		if (index != KErrNotFound)
+			{
+			TAspTaskItem emailItem = iContentList->ReadTaskItemL(profile->Profile(), index);
+			if (emailItem.iEnabled)
+				{
+		    	iContentList->ModifyTaskIncludedL(KUidNSmlAdapterEMail.iUid, EFalse, KNullDesC);
+				}
+			}
+    	}
+	CleanupStack::PopAndDestroy(localDataStores);
+	
+    iContentList->SetProfile(NULL);
+    
+    iCurrentProfileId = aProfileId;
+    
+    profile->GetName(iCurrentProfileName);
+  	if (TUtil::IsEmpty(iCurrentProfileName))
+		{
+		CAspResHandler::ReadL(iCurrentProfileName, R_ASP_UNNAMED_SET);
+		}
+
+  
+    CleanupStack::PopAndDestroy(profile);
+    
+    FLOG( _L("CAspSettingDialog::DoSetCurrentProfileL END") );
+	}
+	
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SetCurrentProfile
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SetCurrentProfile(TInt aProfileId)
+	{
+	if (iContentList->IsLocked())
+		{
+		return; // iContentList used by CAspProfileDialog
+		}
+		
+	TInt err = KErrNone;
+	TInt oldCurrentProfileId = iCurrentProfileId;
+	
+	TRAP(err, DoSetCurrentProfileL(aProfileId));
+	
+	iContentList->SetProfile(NULL);
+	
+    if (err != KErrNone)
+    	{
+        iCurrentProfileId = KErrNotFound;
+        iCurrentProfileName = KNullDesC;
+        iContentList->RemoveAllTasks();
+       	}
+       	
+    if (err != KErrNone && oldCurrentProfileId != KErrNotFound)
+    	{
+   		// some error - try restoring old current profile
+   		TRAP(err, DoSetCurrentProfileL(oldCurrentProfileId));
+   		
+   		iContentList->SetProfile(NULL);
+	
+	    if (err != KErrNone)
+    	    {
+            iCurrentProfileId = KErrNotFound;
+    	    iCurrentProfileName = KNullDesC;
+            iContentList->RemoveAllTasks();
+    	    }
+    	}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SetCurrentProfile
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SetCurrentProfileL()
+	{
+
+#ifdef RD_DSUI_TIMEDSYNC //display profiles in alphabetic order.
+	TInt index = 0;
+	if (!iProfileList->Count())
+		{
+		index = KErrNotFound;
+		}
+
+#else
+	TInt index = iProfileList->FindLastSyncedProfileIndexL();
+
+#endif
+	if (index != KErrNotFound)
+		{
+		TAspProfileItem& item = iProfileList->Item(index);
+		SetCurrentProfile(item.iProfileId);
+		}
+	else
+		{
+		SetCurrentProfile(KErrNotFound);
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::CurrentProfileL
+//
+// -----------------------------------------------------------------------------
+//
+TAspProfileItem& CAspSettingDialog::CurrentProfileL()
+	{
+	TInt index = iProfileList->ListIndex(iCurrentProfileId);
+	if (index == KErrNotFound)
+		{
+		User::Leave(KErrNotFound);
+		}
+		
+	return iProfileList->Item(index);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::HasCurrentProfile
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::HasCurrentProfile()
+	{
+	TInt ret = ETrue;
+	
+	if (iCurrentProfileId == KErrNotFound)
+		{
+		ret = EFalse;
+		}
+		
+	if (iProfileList->Count() == 0)
+		{
+		ret = EFalse;
+		}
+		
+	if (ret)
+		{
+	    TInt index = iProfileList->ListIndex(iCurrentProfileId);	
+	    
+	    __ASSERT_DEBUG(index != KErrNotFound, TUtil::Panic(KErrGeneral));
+		}
+	
+	return ret;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::IsCurrentProfile
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::IsCurrentProfile(TInt aProfileId)
+	{
+	if (aProfileId != KErrNotFound && aProfileId == iCurrentProfileId)
+		{
+		return ETrue;
+		}
+		
+	return EFalse;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DoSaveCurrentProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DoSaveCurrentProfileL()
+	{
+	if (iSettingEnforcement)
+		{
+		return;  // read-only profile
+		}
+
+	if (!HasCurrentProfile())
+		{
+		User::Leave(KErrNotFound);
+		}
+
+    TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+    profile->OpenL(iCurrentProfileId, CAspProfile::EOpenReadWrite, 
+                                      CAspProfile::EAllProperties);
+
+	iContentList->SetProfile(profile);
+	// store selected sync tasks into database
+	iContentList->IncludeTasks(iSettingListBox->SelectionIndexes());
+	iContentList->SetProfile(NULL);
+	
+	CleanupStack::PopAndDestroy(profile);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SaveCurrentProfile
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAspSettingDialog::SaveCurrentProfile()
+	{
+	TRAPD(err, DoSaveCurrentProfileL());
+	
+	iContentList->SetProfile(NULL);
+	
+    if (err == KErrLocked)
+   		{
+        TRAP_IGNORE( TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE) );
+        }
+
+	if (err != KErrNone)
+		{
+		FLOG( _L("### CAspSettingDialog::SaveCurrentProfile: err=%d ###"), err );
+    	}
+    	
+    return err;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::EditProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::EditProfileL(TInt aEditMode ,TInt aFocus)
+	{
+	if (iSettingEnforcement)
+		{
+		aEditMode = EDialogModeSettingEnforcement;
+		}
+    
+    if (IsProfileLockedL(iCurrentProfileId))
+		{
+		TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+		return;
+		}
+	TRAPD(err, DoEditProfileL(aEditMode ,aFocus));
+    iContentList->SetProfile(NULL);
+	User::LeaveIfError(err);
+
+#ifdef RD_DSUI_TIMEDSYNC 
+	iUpdateTabGroup = ETrue;
+	UpdateTabsL();
+#endif
+
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DoEditProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DoEditProfileL(TInt aEditMode, TInt aFocus)
+	{
+	if (!HasCurrentProfile())
+		{
+		return;
+		}
+		
+    TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+    
+    iContentList->SetProfile(profile);
+    
+    if (aEditMode == EDialogModeEdit || aEditMode == EDialogModeEditMandatory)
+    	{
+    	profile->OpenL(iCurrentProfileId, CAspProfile::EOpenReadWrite,
+                                          CAspProfile::EAllProperties);
+                                          
+    	}
+    else
+    	{
+    	profile->OpenL(iCurrentProfileId, CAspProfile::EOpenRead,
+                                          CAspProfile::EAllProperties);
+    	}
+
+		
+	TAspParam param2(iApplicationId, iSyncSession);
+	param2.iProfile = profile;
+	param2.iMode = aEditMode;
+    param2.iContentList = iContentList;
+    param2.iProfileList = iProfileList;  // needed for unique server id check
+    param2.iDataProviderId = aFocus;
+ 
+#ifdef RD_DSUI_TIMEDSYNC 
+	CAspSettingViewDialog::ShowDialogL(param2);
+#else
+	CAspProfileDialog::ShowDialogL(param2);
+#endif
+
+	iContentList->SetProfile(NULL);
+	CleanupStack::PopAndDestroy(profile);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::CheckMandatoryDataL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAspSettingDialog::CheckMandatoryDataL()
+	{
+	TInt ret = EMandatoryOk;
+	
+	TRAPD(err, ret = DoCheckMandatoryDataL());
+	
+	User::LeaveIfError(err);
+		
+	return ret;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DoCheckMandatoryDataL
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAspSettingDialog::DoCheckMandatoryDataL()
+	{
+	if (!HasCurrentProfile())
+		{
+		User::Leave(KErrNotFound);
+		}
+		
+    TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+    profile->OpenL(iCurrentProfileId, CAspProfile::EOpenRead,
+                                      CAspProfile::EAllProperties);
+    
+    
+    TInt mandatoryConnectionData = CAspProfile::CheckMandatoryConnData(profile);
+    CleanupStack::PopAndDestroy(profile);
+	
+	TInt contentCount = 0;
+	TInt mandatoryContentData = iContentList->CheckMandatoryDataL(contentCount);
+	
+	if (mandatoryConnectionData != EMandatoryOk)
+		{
+		return mandatoryConnectionData;
+		}
+		
+	return mandatoryContentData;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DeleteProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DeleteProfileL()
+    {
+
+#ifdef RD_DSUI_TIMEDSYNC 
+	 TAspParam param(iApplicationId, iSyncSession);
+	 CAspProfile* profile = CAspProfile::NewLC(param);
+     TRAPD(err,profile->OpenL(iCurrentProfileId, CAspProfile::EOpenReadWrite,
+                                      CAspProfile::EAllProperties));
+
+	 if (err == KErrLocked)
+   		{
+        TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+		CleanupStack::PopAndDestroy(profile);
+		return;
+	 	}
+	 CAspSchedule* schedule = CAspSchedule::NewLC();
+	
+	 TInt profileId = schedule->ProfileId();
+	 if (profileId == iCurrentProfileId && schedule->IsAutoSyncEnabled())
+	 	{
+		HBufC* hBuf = CAspResHandler::ReadLC(R_ASP_DS_CONF_QUERY_DELETE_AUTO_SYNC_PROFILE);
+		if (!TDialogUtil::ShowConfirmationQueryL(hBuf->Des()))
+			{
+			CleanupStack::PopAndDestroy(hBuf);
+			CleanupStack::PopAndDestroy(schedule);
+	        CleanupStack::PopAndDestroy(profile);
+			return;
+			}
+		CleanupStack::PopAndDestroy(hBuf);
+		schedule->SetProfileId(KErrNotFound);
+		schedule->UpdateSyncScheduleL();
+		schedule->SaveL();
+		}
+	 else
+	 	{
+		TBuf<KBufSize> profileName;
+	 	profile->GetName(profileName);
+	 	HBufC* hBuf1 = CAspResHandler::ReadLC(R_ASP_QUERY_COMMON_CONF_DELETE, profileName);
+
+	 	if (!TDialogUtil::ShowConfirmationQueryL(hBuf1->Des()))
+		    {
+			CleanupStack::PopAndDestroy(hBuf1);
+			CleanupStack::PopAndDestroy(schedule);
+			CleanupStack::PopAndDestroy(profile);
+			return;
+	 		}
+		CleanupStack::PopAndDestroy(hBuf1);
+	 	}
+	CleanupStack::PopAndDestroy(schedule);
+	CleanupStack::PopAndDestroy(profile);
+	if (!IsSyncOnGoingL(iCurrentProfileId))
+		{
+		TRAPD (err1,iSyncSession->DeleteProfileL(iCurrentProfileId));
+		
+		if (err1 == KErrLocked)
+   			{
+       		TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+       		}
+    	User::LeaveIfError(err);
+		}
+	iUpdateTabGroup = ETrue;	
+	SetPreviousProfileL();
+	
+	
+#else
+
+    TAspFilterInfo info;
+    info.iFilterType = TAspFilterInfo::EIncludeDeletableProfile;
+    CAspProfileList* filteredList = iProfileList->FilteredListL(info);
+    CleanupStack::PushL(filteredList);
+    
+	TInt count = filteredList->Count();
+	TInt err = KErrNone;
+
+	if (count == 1)
+		{
+		TAspProfileItem& profile = filteredList->Item(0);
+
+		HBufC* hBuf = CAspResHandler::ReadLC(R_ASP_CONFIRM_DELETE, profile.iProfileName);
+	    if (TDialogUtil::ShowConfirmationQueryL(hBuf->Des()))
+		    {
+		    if (!IsSyncOnGoingL(profile.iProfileId))
+		    	{
+		    	TRAP(err, iSyncSession->DeleteProfileL(profile.iProfileId));
+		    	}
+		    }
+   		
+   		CleanupStack::PopAndDestroy(hBuf);
+    	}
+	
+	else if (count > 0)
+		{
+		TInt profileId = KErrNotFound;
+	    if (TDialogUtil::ShowProfileQueryL(filteredList, profileId,
+	                                       R_ASP_QUERY_TITLE_DELETE_PROFILE))
+		    {
+		    if (!IsSyncOnGoingL(profileId))
+		    	{
+		    	TRAP(err, iSyncSession->DeleteProfileL(profileId));
+		    	}
+		    }
+		}
+
+	if (err == KErrLocked)
+   		{
+        TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+        }
+    User::LeaveIfError(err);
+    
+	CleanupStack::PopAndDestroy(filteredList);
+
+#endif
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowLogDialogL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ShowLogDialogL()
+    {
+    
+	TAspParam param(iApplicationId, iSyncSession);
+	TAspProfileItem& profile = CurrentProfileL();
+	param.iProfileId = profile.iProfileId;
+
+#ifdef RD_DSUI_TIMEDSYNC 
+   	
+	CAspSchedule* schedule = CAspSchedule::NewLC();
+	if (iCurrentProfileId == schedule->ProfileId())
+		{
+		TInt asProfileId = schedule->AutoSyncProfileId();
+		CAspProfile* asProfile = CAspProfile::NewLC(param);
+		asProfile->OpenL(asProfileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+
+		/*if (asProfile->LastSync() > profile.iLastSync)
+			{
+			param.iProfileId = asProfileId;
+			}*/	
+		TTime now;
+		now.HomeTime();
+		if (profile.iLastSync == 0)
+			{
+			param.iProfileId = asProfileId;
+			}
+		else if ((asProfile->LastSync()< now && profile.iLastSync < now)
+								|| (asProfile->LastSync() > now && profile.iLastSync > now))
+			{
+			if (asProfile->LastSync() > profile.iLastSync)
+				{
+				param.iProfileId = asProfileId;
+				}
+			}
+		else if	((asProfile->LastSync()< now && profile.iLastSync > now))
+			{
+			param.iProfileId = asProfileId;
+			}
+		CleanupStack::PopAndDestroy(asProfile);
+		}
+	
+	CleanupStack::PopAndDestroy(schedule);
+		
+#endif   
+	
+
+    CAspLogDialog* dialog = CAspLogDialog::NewL(param);
+    CleanupStack::PushL(dialog);
+        
+    dialog->ShowDialogL();
+        
+    CleanupStack::PopAndDestroy(dialog);
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowAutoSyncDialogL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ShowAutoSyncDialogL()
+    {
+    
+    CAspSchedule* schedule = CAspSchedule::NewLC();
+	if (schedule->IsAutoSyncEnabled())
+		{
+		TInt profileId = schedule->ProfileId();
+		if(profileId != iCurrentProfileId && profileId != KErrNotFound)
+			{
+			if(!TDialogUtil::ShowConfirmationQueryL(R_ASP_QUERY_AUTO_SYNC_ON))
+				{
+				CleanupStack::PopAndDestroy(schedule);
+				return ;
+				}
+			}
+		}
+    CleanupStack::PopAndDestroy(schedule);
+	
+	TAspParam param(iApplicationId, iSyncSession);
+    param.iProfileList = iProfileList;
+	param.iProfile = NULL;
+	param.iContentList = iContentList;
+ 	CAspScheduleDialog::ShowDialogL(param);
+
+#ifdef RD_DSUI_TIMEDSYNC 
+	UpdateTabsL();
+#endif
+	
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ChangeProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ChangeProfileL()
+    {
+    if (iProfileList->Count() == 0)
+    	{
+    	return;
+    	}
+    	
+	TInt profileId = KErrNotFound;
+	if (TDialogUtil::ShowProfileQueryL(iProfileList, profileId, 
+	                                   R_ASP_QUERY_TITLE_CHANGE_PROFILE))
+		{
+		if (profileId == iCurrentProfileId)
+			{
+			return;
+			}
+			
+		SetCurrentProfile(profileId);
+		//ShowCurrentProfileInfo();
+		UpdateListBoxL();
+		
+#ifdef RD_DSUI_TIMEDSYNC //RD_DSUI_NO_TIMEDSYNC
+
+		UpdateTabsL();
+#else
+		UpdateNavipaneL(iCurrentProfileName);
+#endif
+		}
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::CopyFromServerL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::CopyFromServerL()
+	{
+	if (!TDialogUtil::ShowConfirmationQueryL(R_ASP_COPY_FROM_SERVER))
+		{
+		return;
+		}
+
+	TRAPD(err, DoSyncProfileL(ESyncDirectionRefreshFromServer));
+	
+	if (err == KErrLocked)
+		{
+		TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+		}
+	User::LeaveIfError(err);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SyncProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SyncProfileL()
+	{
+		
+	if (IsProfileLockedL(iCurrentProfileId))
+		{
+		TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+		return;
+		}
+	
+	TRAPD(err, DoSyncProfileL(KErrNotFound));
+	User::LeaveIfError(err);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DoSyncProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DoSyncProfileL(TInt aSyncType)
+	{
+    __ASSERT_ALWAYS(iSyncSession, TUtil::Panic(KErrGeneral));
+    	
+	if (iProfileList->Count() == 0)
+		{
+	    if (TDialogUtil::ShowConfirmationQueryL(R_ASP_QUERY_NO_PROFILES))
+		    {
+		    CreateProfileL();
+		    }
+		    
+		return;
+    	}
+    
+    //check PS key
+    TInt keyVal = 0;//EDataSyncNotRunning
+    TInt err = RProperty::Get( KPSUidDataSynchronizationInternalKeys,
+                                 KDataSyncStatus,
+                                 keyVal );
+    if(err == KErrNone && keyVal)
+    	{
+    	TDialogUtil::ShowInformationNoteL(R_ASP_SYNC_ALREADY_RUNNING);
+		return;
+    	}
+    
+	
+	if (CAspProfile::OtherSyncRunning(iSyncSession))
+		{
+		TDialogUtil::ShowInformationNoteL(R_ASP_SYNC_ALREADY_RUNNING);
+		return;
+		}
+
+     // check that valid current profile exists
+    TInt mandatoryCheck = CheckMandatoryDataL();
+    
+ 	if (mandatoryCheck == EMandatoryNoContent)
+		{
+		TDialogUtil::ShowErrorNoteL(R_ASP_ERR_NOCONTENT);
+		return;
+        }
+	else if (mandatoryCheck != EMandatoryOk)
+		{
+        if (iSettingEnforcement)
+    	    {
+    	    TDialogUtil::ShowInformationNoteL(R_ASP_NOTE_TARM_MANDATORY_MISSING);
+    	    }    	
+		else if (TDialogUtil::ShowConfirmationQueryL(R_ASP_QUERY_MANDATORY_MISSING))
+			{
+			TInt contentCount = 0;
+			TInt incompleteContent = KErrNotFound;
+			TInt taskIndex = KErrNotFound;
+			if (iContentList->CheckMandatoryDataL(contentCount))
+				{
+				TInt count = iContentList->ProviderCount();
+				for (TInt i=0; i<count; i++)
+					{
+					//data provider ids are sorted before task list creation ,so provider id has to be used
+					//to get the correct position of item
+					TAspProviderItem& providerItem = iContentList->ProviderItem(i);
+					taskIndex = iContentList->FindTaskIndexForProvider(providerItem.iDataProviderId);
+					if (taskIndex == KErrNotFound)
+						{
+						//task is not created
+						continue;	
+						}
+					TAspTaskItem& task = iContentList->TaskItem(taskIndex);
+					if (!task.iEnabled)
+						{
+						continue; // task not part of sync - no need to check remote data base
+						}
+					if (!task.iRemoteDatabaseDefined)
+						{
+						incompleteContent = task.iDataProviderId;
+						break;
+						}
+					}
+				}
+			EditProfileL(EDialogModeEditMandatory ,incompleteContent);
+			}
+			
+		return;
+        }
+
+
+	if (!iSyncHandler)
+		{
+    	TAspParam param(iApplicationId, NULL);
+		iSyncHandler = CAspSyncHandler::NewL(param);
+		}
+	else
+		{
+		if (SyncRunning())
+			{
+			TDialogUtil::ShowInformationNoteL(R_ASP_SYNC_ALREADY_RUNNING);
+    		return;
+			}
+		}
+    	
+    iSyncHandler->SetObserver(this);
+
+   	TAspSyncParam param(iApplicationId);
+	param.iProfileId = iCurrentProfileId;
+	if (aSyncType == ESyncDirectionRefreshFromServer)
+		{
+		param.iSyncDirection = aSyncType;
+		}
+
+#ifdef RD_DSUI_TIMEDSYNC 
+	DeleteAutoSyncHistory();
+#endif
+
+	iSyncHandler->SynchronizeL(param);
+	}
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::DeleteAutoSyncHistory
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::DeleteAutoSyncHistory()
+	{
+	TAspParam param(iApplicationId, iSyncSession);
+	CAspSchedule* schedule = CAspSchedule::NewLC();
+	if (schedule->IsAutoSyncEnabled() && iCurrentProfileId == schedule->ProfileId())
+		{
+		TInt asProfileId = schedule->AutoSyncProfileId();
+		CAspProfile* asProfile = CAspProfile::NewLC(param);
+		asProfile->OpenL(asProfileId, CAspProfile::EOpenReadWrite, CAspProfile::EAllProperties);
+		asProfile->DeleteHistory();
+		CleanupStack::PopAndDestroy(asProfile);
+		}
+	CleanupStack::PopAndDestroy(schedule);
+	}
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::CreateProfileL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::CreateProfileL()
+	{
+	TAspParam param(iApplicationId, iSyncSession);
+	param.iProfileList = iProfileList;
+	
+	CAspProfileWizardDialog::ShowDialogL(param);
+
+#ifdef RD_DSUI_TIMEDSYNC 
+	iUpdateTabGroup = ETrue;
+#endif
+
+	if (param.iReturnValue == KErrNone && param.iProfileId != KErrNotFound)
+		{
+		SetCurrentProfile(param.iProfileId);
+		UpdateListBoxL();
+#ifdef RD_DSUI_TIMEDSYNC 
+	
+		UpdateTabsL();
+#else
+		UpdateNavipaneL(iCurrentProfileName);
+#endif
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::IconL
+// 
+// -----------------------------------------------------------------------------
+//
+CGulIcon* CAspSettingDialog::IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex, TInt aFileMaskIndex)
+	{
+    return TDialogUtil::CreateIconL(aId, aFileName, aFileIndex, aFileMaskIndex);
+	}
+
+	
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateListBoxL
+//	
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::UpdateListBoxL()
+	{
+	SetCurrentIndex();
+	
+	CAknDoubleLargeStyleListBox* listBox = ListBox();
+	CDesCArray* items = (CDesCArray*) listBox->Model()->ItemTextArray();
+	items->Reset();
+    listBox->ItemDrawer()->ClearAllPropertiesL();
+   
+	TInt count = iContentList->ProviderCount();
+
+	for (TInt i=0; i<count; i++)
+		{
+		HBufC* firstLine = NULL;
+		HBufC* secondLine = NULL;
+				
+		TAspProviderItem& providerItem = iContentList->ProviderItem(i);
+		
+		firstLine = CAspResHandler::GetContentNameLC(
+		            providerItem.iDataProviderId, providerItem.iDisplayName);
+		
+		TInt index = iContentList->FindTaskIndexForProvider(providerItem.iDataProviderId);
+		if (providerItem.iDataProviderId == KUidNSmlAdapterEMail.iUid )
+		{
+		
+			if(!providerItem.iHasDefaultDataStore)
+			{
+			TInt providerListIndex = iContentList->FindProviderIndex(providerItem.iDataProviderId);
+			
+			CListBoxView* view = iSettingListBox->View();
+
+			view->DeselectItem(providerListIndex);
+			}
+		}
+		if (index != KErrNotFound)
+			{
+			TAspTaskItem& task = iContentList->TaskItem(index);
+	
+		    if (task.iLastSync != 0) // task has been synchronised
+			    {
+			    secondLine = TUtil::SyncTimeLC(task.iLastSync);
+			    }
+		    else
+			    {
+			    secondLine = CAspResHandler::ReadLC(R_ASP_NOT_SYNCED);
+			    }
+			}
+		else
+			{
+			secondLine = CAspResHandler::ReadLC(R_ASP_NOT_SYNCED);
+			}
+		
+		
+		TPtr ptr1 = firstLine->Des();
+		AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr1);
+		TPtr ptr2 = secondLine->Des();
+        AknTextUtils::DisplayTextLanguageSpecificNumberConversion(ptr2);
+
+		HBufC* hBuf = NULL;
+		hBuf = TDialogUtil::ConstructListBoxItemLC(firstLine->Des(), secondLine->Des(), 0);
+
+		items->AppendL(hBuf->Des());
+		
+		CleanupStack::PopAndDestroy(hBuf);
+		CleanupStack::PopAndDestroy(secondLine);
+		CleanupStack::PopAndDestroy(firstLine);
+		}
+
+	listBox->HandleItemAdditionL();
+	
+	if (listBox->Model()->NumberOfItems() == 0)
+		{
+	    iStatusPaneHandler->SetNaviPaneTitle(KNullDesC);
+		}
+	else
+		{
+		UpdateContentSelectionL();
+		
+		TInt current = CurrentIndex();
+		if (current != KErrNotFound)
+			{
+			ListBox()->SetCurrentItemIndexAndDraw(current);
+			}
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateContentSelectionL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::UpdateContentSelectionL()
+    {
+    // update selected task check boxes from current profile content list
+    CListBoxView::CSelectionIndexArray* arrayOfSelectionIndexes = NULL;
+    arrayOfSelectionIndexes = new (ELeave) CArrayFixFlat<TInt>(KDefaultArraySize);
+    CleanupStack::PushL(arrayOfSelectionIndexes);
+
+	if (HasCurrentProfile())
+		{
+		iContentList->GetIncludedProviders(arrayOfSelectionIndexes);
+		}
+        
+    iSettingListBox->SetSelectionIndexesL(arrayOfSelectionIndexes);
+
+    CleanupStack::PopAndDestroy(arrayOfSelectionIndexes);
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateNavipaneL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::UpdateNavipaneL(const TDesC& aText)
+	{
+	if (iCurrentProfileName.Compare(aText) != 0)
+		{
+		TUtil::StrCopy(iCurrentProfileName, aText);
+		}
+		
+	iStatusPaneHandler->SetNaviPaneTitleL(iCurrentProfileName);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::HandleSyncEventL (from MAspSyncObserver)
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::HandleSyncEventL(TInt /*aError*/, TInt aInfo1)
+	{
+    iDbNotifier->CreateUpdateEventL(aInfo1, KErrNone);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::HandleDbEventL (from MAspDbEventHandler)
+//
+// This function updates UI when it receives sync profile database
+// events (see AspDbNotifier).
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::HandleDbEventL(TAspDbEvent aEvent)
+	{
+	FLOG( _L("CAspSettingDialog::HandleDbEventL START") );
+
+    switch (aEvent.iType)
+		{
+		case CAspDbNotifier::EClose:
+			{
+			
+#ifdef _DEBUG			
+			LogDatabaseEvent(aEvent);
+#endif		
+	
+			TDialogUtil::ShowErrorNoteL(R_ASP_LOG_ERR_SERVERERROR);
+            iAvkonAppUi->ProcessCommandL(EAknCmdExit); //  close sync app
+			break;
+			}
+		
+		case CAspDbNotifier::EUpdate:
+			{
+			iProfileList->ReadProfileL(aEvent.iProfileId);
+			iProfileList->Sort();
+      	    if (IsCurrentProfile(aEvent.iProfileId))
+            	{
+            	if (!iContentList->IsLocked())
+            		{
+            		SetCurrentProfile(aEvent.iProfileId);
+                    UpdateListBoxL();
+#ifdef RD_DSUI_TIMEDSYNC 
+					UpdateTabsL();
+#else
+                    UpdateNavipaneL(iCurrentProfileName);
+#endif               
+            		}
+            	}
+			
+#ifdef _DEBUG
+            LogDatabaseEvent(aEvent);
+#endif
+			
+			break;
+			}
+
+		case CAspDbNotifier::EDelete:
+			{
+
+#ifdef _DEBUG
+            LogDatabaseEvent(aEvent);
+#endif
+
+            TInt index = iProfileList->ListIndex(aEvent.iProfileId);
+            if (index != KErrNotFound)
+            	{
+            	iProfileList->Remove(aEvent.iProfileId);
+            	if (IsCurrentProfile(aEvent.iProfileId))
+            		{
+            		if (!iContentList->IsLocked())
+            		    {
+            		    SetCurrentProfileL(); // set new current profile
+                        UpdateListBoxL();
+#ifdef RD_DSUI_TIMEDSYNC 
+					UpdateTabsL();
+#else
+                    UpdateNavipaneL(iCurrentProfileName);
+#endif            		 
+						}
+            		}
+            	}
+			break;
+			}
+
+		case CAspDbNotifier::EUpdateAll:
+			{
+
+#ifdef _DEBUG			
+			LogDatabaseEvent(aEvent);
+#endif
+
+			iProfileList->ReadAllProfilesL(CAspProfileList::ENoMandatoryCheck);
+			iProfileList->Sort();
+           	if (!iContentList->IsLocked())
+            	{
+            	SetCurrentProfile(iCurrentProfileId); // set new current profile
+                UpdateListBoxL();
+#ifdef RD_DSUI_TIMEDSYNC 
+					UpdateTabsL();
+#else
+                    UpdateNavipaneL(iCurrentProfileName);
+#endif         	
+				}
+
+			break;
+			}
+
+		default:
+			break;
+		}
+		
+	FLOG( _L("CAspSettingDialog::HandleDbEventL END") );
+	}
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::HandleOKL()
+// 
+// -----------------------------------------------------------------------------
+//
+
+void CAspSettingDialog::HandleOKL()
+{
+	
+	if (iProfileList->Count() == 0)
+			{
+			return;
+			}
+        
+        if (IsProfileLockedL(iCurrentProfileId))
+        	{
+        	TDialogUtil::ShowErrorNoteL(R_ASP_LOCKED_PROFILE);
+			CancelCheckboxEvent();
+			return;
+			}
+        
+        if (iSettingEnforcement)
+			{
+			CancelCheckboxEvent();
+			TDialogUtil::ShowInformationNoteL(R_ASP_NOTE_MAIN_LOCKED);
+			return ;  // leave dialog open;
+			}
+        
+        if (!CheckEmailSelection())
+        	{
+        	return ;  // leave dialog open;
+        	}
+				
+		TInt ret =  SaveCurrentProfile();
+		if (ret != KErrNone)
+			{
+			CancelCheckboxEvent();
+			}
+			
+		return ;
+}
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::HandleListBoxEventL (from MEikListBoxObserver)
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
+	{
+	   if( AknLayoutUtils::PenEnabled() )  
+	   {
+	   	 switch(aEventType)
+		{
+			case EEventItemClicked :
+			     HandleOKL();
+			     break;
+			default:
+			     break;
+		}
+	   }
+	  
+    }
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::HandleActiveCallL (from MAspActiveCallerObserver)
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::HandleActiveCallL(TInt /*aCallId*/)
+	{
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SetCurrentIndex
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::SetCurrentIndex()
+	{
+	TInt count = ListBox()->Model()->NumberOfItems();
+
+	if (count == 0)
+		{
+		iCurrentListBoxIndex = KErrNotFound;  // empty list
+		}
+	else
+		{
+		iCurrentListBoxIndex = ListBox()->CurrentItemIndex();
+		}
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::CurrentIndex
+//
+// -----------------------------------------------------------------------------
+//
+TInt CAspSettingDialog::CurrentIndex()
+	{
+	TInt count = ListBox()->Model()->NumberOfItems();
+	
+	if (count == 0)
+		{
+		iCurrentListBoxIndex = KErrNotFound;
+		}
+	else if (iCurrentListBoxIndex >= count)
+		{
+		iCurrentListBoxIndex = count-1; // last listbox item
+		}
+	else if (iCurrentListBoxIndex < 0)
+		{
+		iCurrentListBoxIndex = 0; // first listbox item
+		}
+		
+	return iCurrentListBoxIndex;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowCurrentProfileInfoL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ShowCurrentProfileInfoL()
+	{
+	TAspProfileItem& item = CurrentProfileL();
+	TBuf<KBufSize> buf;
+    iBearerHandler->GetBearerName(buf, item.iBearer);
+    HBufC* hBuf = CAspResHandler::ReadProfileInfoTextLC(item.iProfileName, buf);
+    ShowPopupNoteL(hBuf->Des());
+    CleanupStack::PopAndDestroy(hBuf);
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowCurrentProfileInfo
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ShowCurrentProfileInfo()
+	{
+	TRAP_IGNORE(ShowCurrentProfileInfoL());
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowAutoSyncProfileInfoL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::ShowAutoSyncProfileInfo()
+	{
+	TBool ret = EFalse;
+	
+	TRAPD(err, ret = ShowAutoSyncProfileInfoL());
+
+#ifdef RD_DSUI_TIMEDSYNC
+	UpdateTabsL();	
+#endif
+	
+	if (err != KErrNone)
+		{
+		return EFalse;
+		}
+	return ret;
+	}
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowAutoSyncProfileInfoL
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::ShowAutoSyncProfileInfoL()
+	{
+	CAspSchedule* schedule = CAspSchedule::NewLC();
+	
+	if (!schedule->CanSynchronizeL())
+    	{
+   	    CleanupStack::PopAndDestroy(schedule);
+	    return EFalse;
+    	}
+	
+	TInt autoSyncError = schedule->Error();
+	if (autoSyncError != KErrNone)
+		{
+
+		TInt profileId = schedule->ProfileId();
+		TInt asProfileId = schedule->AutoSyncProfileId();
+		TAspParam param(iApplicationId, iSyncSession);
+		CAspProfile* asProfile = CAspProfile::NewLC(param);
+		asProfile->OpenL(asProfileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+		CAspProfile* profile = CAspProfile::NewLC(param);
+		profile->OpenL(profileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+
+		//display auto sync error query only if profile hasn't been manually synced after last auto sync
+		if (asProfile->LastSync() >= profile->LastSync())
+			{
+			if (autoSyncError == CAspAutoSyncHandler::EOtherSyncRunning)
+				{
+				HBufC* hBuf = CAspResHandler::ReadLC(R_ASP_MANUAL_SYNC_OVERRIDE);
+				_LIT(KEmpty, " ");
+				TDialogUtil::ShowMessageQueryL(KEmpty, hBuf->Des());
+   	   			CleanupStack::PopAndDestroy(hBuf);
+				}
+			else
+				{
+				HBufC* hBuf = CAspResHandler::ReadLC(R_ASP_POPUP_AUTO_SYNC_ERROR);
+				_LIT(KNewLine ,"\n");
+				TBuf<KBufSize> buf(hBuf->Des());
+				buf.Append(KNewLine);
+				CAspResHandler::ReadL(iBuf, R_ASP_MAIN_AUTO_ERROR_LOG_LINK);
+				buf.Append(iBuf);
+				CleanupStack::PopAndDestroy(hBuf);
+				hBuf = HBufC::NewLC(buf.Size());
+				TPtr ptr(hBuf->Des());
+				ptr = buf;
+
+			   	TDialogUtil::ShowAutoSyncMessageQueryL(hBuf->Des());
+	   	   		CleanupStack::PopAndDestroy(hBuf);
+				}
+	  	    
+   	    	schedule->SetError(KErrNone);
+   	    	schedule->SaveL();
+
+			CleanupStack::PopAndDestroy(profile);
+			CleanupStack::PopAndDestroy(asProfile);
+			CleanupStack::PopAndDestroy(schedule);
+   	    	return ETrue;
+			}
+		
+		CleanupStack::PopAndDestroy(profile);
+		CleanupStack::PopAndDestroy(asProfile);
+		
+		schedule->SetError(KErrNone);
+   	    schedule->SaveL();
+		}
+
+    
+    TTime nextSync;
+    schedule->GetStartTimeL(nextSync ,ETrue);
+
+    TInt profileIndex = iProfileList->ListIndex(schedule->ProfileId());
+    TAspProfileItem& item = iProfileList->Item(profileIndex); 
+    
+	HBufC* hBuf1 = CAspResHandler::ReadAutoSyncInfoTextLC( item.iProfileName, nextSync);
+	
+	TDialogUtil::ShowInformationNoteL(hBuf1->Des());
+   	CleanupStack::PopAndDestroy(hBuf1);
+    CleanupStack::PopAndDestroy(schedule);
+	return ETrue;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::ShowPopupNote
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::ShowPopupNoteL(const TDesC& aText) 
+    {
+    iPopupNote->SetTextL(aText);
+    iPopupNote->SetTimePopupInView(KSettingDialogPopupDisplayTime);    
+    iPopupNote->ShowInfoPopupNote();    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::Listbox
+//
+// -----------------------------------------------------------------------------
+//
+CAknDoubleLargeStyleListBox* CAspSettingDialog::ListBox()
+	{
+	__ASSERT_DEBUG(iSettingListBox, TUtil::Panic(KErrGeneral));
+
+	return iSettingListBox;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::SyncRunning
+//
+// -----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::SyncRunning()
+	{
+    if (!iSyncHandler)
+		{
+		return EFalse;
+		}
+
+	if (iSyncHandler->SyncRunning())
+		{
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+
+// -----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateCbaL
+// 
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::UpdateCbaL(TInt aResourceId)
+    {
+    CEikButtonGroupContainer& cba = ButtonGroupContainer();
+    cba.SetCommandSetL(aResourceId);
+    cba.DrawDeferred();
+    }
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::CancelCheckboxEvent
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspSettingDialog::CancelCheckboxEventL()
+	{
+	CListBoxView* view = iSettingListBox->View();
+    
+    TInt index = view->CurrentItemIndex();
+    TBool selected = view->ItemIsSelected(index);
+    if (selected)
+       	{
+        view->DeselectItem(index);
+       	}
+    else
+    	{
+    	view->SelectItemL(index);
+    	}
+    	
+    iSettingListBox->SetCurrentItemIndex(index);
+    //view->SetCurrentItemIndex(index);
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::CancelCheckboxEvent
+// 
+// ----------------------------------------------------------------------------
+//
+void CAspSettingDialog::CancelCheckboxEvent()
+	{
+	TRAP_IGNORE(CancelCheckboxEventL());
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::CheckEmailSelection
+// 
+// ----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::CheckEmailSelection()
+	{
+	TBool ret = ETrue;
+	
+	TRAPD(err, ret = CheckEmailSelectionL());
+	
+	if (err != KErrNone)
+		{
+		return ETrue;
+		}
+	
+	return ret;
+	}
+
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::CheckEmailSelectionL
+// 
+// ----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::CheckEmailSelectionL()
+	{
+	CListBoxView* view = iSettingListBox->View();
+	
+    TInt index = view->CurrentItemIndex();
+    TAspProviderItem& item = iContentList->ProviderItem(index);
+    TBool selected = view->ItemIsSelected(index);
+    
+    if (item.iDataProviderId != KUidNSmlAdapterEMail.iUid)
+    	{
+    	return ETrue;
+    	}
+        
+    if (!selected)
+    	{
+    	return ETrue;
+    	}
+    
+    iContentList->UpdateDataProviderL(item.iDataProviderId);
+    if (!item.iHasDefaultDataStore)
+    	{
+    	CancelCheckboxEvent();
+    	TDialogUtil::ShowErrorNoteL(R_ASP_NO_MAILBOXES);
+    	return EFalse;
+    	}
+    	
+    if (HasCurrentProfile())
+    	{
+    	TAspParam param(iApplicationId, iSyncSession);
+	    CAspProfile* profile = CAspProfile::NewLC(param);
+        profile->OpenL(iCurrentProfileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+      
+	    TInt num = profile->ProtocolVersion();
+	    CleanupStack::PopAndDestroy(profile);
+
+    	}
+    
+    	
+    
+    return ETrue;
+	}
+
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::IsProfileLockedL
+// Checks if a particular profile is already opened
+// ----------------------------------------------------------------------------
+//
+TBool CAspSettingDialog::IsProfileLockedL(TInt aProfileId)
+{
+	
+	TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+	
+	
+	TRAPD(err, profile->OpenL(aProfileId, CAspProfile::EOpenReadWrite,
+                                         CAspProfile::EAllProperties));
+                                         
+    
+	if (err == KErrLocked)
+		{
+		CleanupStack::PopAndDestroy(profile);
+		return ETrue;
+		}
+	else
+		{
+		CleanupStack::PopAndDestroy(profile);
+		return EFalse;
+		}
+	
+}
+// ----------------------------------------------------------------------------
+// CAspSettingDialog::UpdateMiddleSoftKeyLabelL
+// Update the MSK Label
+// ----------------------------------------------------------------------------
+//
+void CAspSettingDialog::UpdateMiddleSoftKeyLabelL(TInt aCommandId,TInt aResourceId)
+{
+	ButtonGroupContainer().RemoveCommandFromStack(KMSKControlId,aCommandId );
+	HBufC* middleSKText = StringLoader::LoadLC( aResourceId );
+
+	ButtonGroupContainer().AddCommandToStackL(
+	KMSKControlId,
+	aCommandId,
+	*middleSKText );
+	CleanupStack::PopAndDestroy( middleSKText );
+}
+
+#ifdef _DEBUG
+
+
+// -----------------------------------------------------------------------------
+// LogDatabaseEvent
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::LogDatabaseEvent(TAspDbEvent aEvent)
+	{
+	TBuf<KBufSize> buf;
+	
+    if (aEvent.iType == CAspDbNotifier::EClose)
+    	{
+    	FLOG( _L("### EClose: close setting dialog ###") );
+    	}
+    else if (aEvent.iType == CAspDbNotifier::EUpdate)
+    	{
+        TInt index = iProfileList->ListIndex(aEvent.iProfileId);
+        if (index != KErrNotFound)
+           	{
+           	TAspProfileItem& item = iProfileList->Item(index);
+            FTRACE( RDebug::Print(_L("EUpdate: %S (%d)"), &item.iProfileName, aEvent.iProfileId) );
+               
+            buf.Format(_L("EUpdate: %S"), &item.iProfileName);
+		    TUtil::Print(buf);
+           	}
+        else
+          	{
+           	FTRACE( RDebug::Print(_L("### EUpdate: profile not found (%d) ###"), aEvent.iProfileId) );
+           	TUtil::Print(_L("EUpdate: profile not found"));
+           	}
+    	}
+    else if (aEvent.iType == CAspDbNotifier::EDelete)
+    	{
+        TInt index = iProfileList->ListIndex(aEvent.iProfileId);
+        if (index != KErrNotFound)
+           	{
+           	TAspProfileItem& item = iProfileList->Item(index);
+		    FTRACE( RDebug::Print(_L("EDelete: %S (%d)"), &item.iProfileName, aEvent.iProfileId) );
+
+            buf.Format(_L("EDelete: %S"), &item.iProfileName);
+		    TUtil::Print(buf);
+           	}
+        else
+           	{
+           	FTRACE( RDebug::Print(_L("EDelete: profile not found (%d)"), aEvent.iProfileId) );
+           	TUtil::Print(_L("EDelete: profile not found"));
+           	}
+    	
+    	}
+    else if (aEvent.iType == CAspDbNotifier::EUpdateAll)
+    	{
+     	FLOG( _L("EUpdateAll: read all profiles") );
+     	TUtil::Print(_L("EUpdateAll: read all profiles"));
+    	}
+	}
+
+
+// -----------------------------------------------------------------------------
+// TestL
+//
+// -----------------------------------------------------------------------------
+//
+void CAspSettingDialog::TestL()
+    {
+    TAspParam param(iApplicationId, iSyncSession);
+	CAspProfile* profile = CAspProfile::NewLC(param);
+    profile->OpenL(iCurrentProfileId, CAspProfile::EOpenRead, CAspProfile::EAllProperties);
+      
+	TBuf<128> buf; TBuf<128> buf2;
+	profile->GetPassword(buf);
+	TInt len = buf.Length();
+	buf2.Format(_L("len = %d  text = %S"), len, &buf);
+	TDialogUtil::ShowMessageQueryL(_L("huu"), buf2);
+    CleanupStack::PopAndDestroy(profile);
+    
+    /*
+    CListBoxView* view = iSettingListBox->View();
+    const CListBoxView::CSelectionIndexArray* arr = view->SelectionIndexes();
+    TBuf<128> buf; TBuf<128> buf2;
+    TInt count = arr->Count();
+    for (TInt i=0; i<count; i++)
+     	{
+       	buf2.Format(_L("%d "), (*arr)[i]);
+       	buf.Append(buf2);
+       	}
+    TDialogUtil::ShowMessageQueryL(_L("huu"), buf);
+    */
+    
+    /*
+    HBufC* hBuf = iResHandler->ReadProgressTextLC(_L("qwerty ggggggggggggggggggggggg"), CAspState::EPhaseSending);
+    TDialogUtil::ShowMessageQueryL(_L("huu"), hBuf->Des());
+    CleanupStack::PopAndDestroy(hBuf);
+    
+    hBuf = iResHandler->ReadProgressTextLC(_L("qwerty ggggggggggggggggggggggg"), CAspState::EPhaseReceiving);
+    TDialogUtil::ShowMessageQueryL(_L("huu"), hBuf->Des());
+    CleanupStack::PopAndDestroy(hBuf);
+
+    hBuf = iResHandler->ReadProgressTextLC(_L("qwerty ggggggggggggggggggggggg"), 34);
+    TDialogUtil::ShowMessageQueryL(_L("huu"), hBuf->Des());
+    CleanupStack::PopAndDestroy(hBuf);
+    */
+    }
+
+
+#endif
+
+
+
+
+
+//  End of File