--- /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