--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/IMSSettingsDialog.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,3897 @@
+/*
+* Copyright (c) 2006 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: IMSSettingsDialog.cpp
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <avkon.hrh>
+#include <muiuflagger.h>
+#include <ImumUtils.rsg>
+#include <miutset.h> // CImBaseEmailSettings
+#include <smtpset.h> // CImSmtpSettings
+#include <pop3set.h> // CImPop3Settings
+#include <imapset.h> // CImImap4Settings
+#include <iapprefs.h> // CImIAPPreferences
+#include <AknQueryDialog.h> // CAknMultiLineDataQueryDialog
+#include <charconv.h> // CCnvCharacterSetConverter
+#include <aknradiobuttonsettingpage.h> // CAknRadioButtonSettingPage
+#include <muiu_internal.rsg>
+#include <AknUtils.h> //AknTextUtils
+#include "ComDbUtl.h"
+
+#include <cmapplicationsettingsui.h>
+
+#include "ImumInternalApiImpl.h"
+#include "ImumMboxSymbianDataConverter.h"
+#include "ImumMboxInternalDataConverter.h"
+#include "EmailFeatureUtils.h"
+#include "Imas.hrh"
+#include "ImumInSettingsData.h"
+#include "IMSSettingsDialog.h"
+#include "IMSSettingsNoteUi.h"
+#include "IMSFolderSubscription.h"
+#include "ImumUtilsLogging.h"
+#include <csxhelp/mbxs.hlp.hrh>
+#include "ImumPanic.h"
+#include "ImumInSettingsData.h"
+#include "ImumConstants.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+const TInt KIMASEveryDayMask = 0x7f;
+const TInt KIMSDefaultSizeKB = 1;
+const TInt KIMSMaxNumValue = 999;
+
+enum TIMSRetrieveLimit
+ {
+ EIMSLimitFetchAll = 0,
+ EIMSLimitUserDefined
+ };
+
+// MACROS
+#define DFILLBUF( a, b ) buffer.Copy( a.Left( b ) )
+#define DITEM( a ) ( *array )[a].iItem
+
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+typedef CCnvCharacterSetConverter::SCharacterSet CIMACharConvItem;
+typedef CArrayFix<CIMACharConvItem> CIMACharConvList;
+
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+/******************************************************************************
+
+ Constructors & Destructor
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::CIMSSettingsDialog()
+// ----------------------------------------------------------------------------
+CIMSSettingsDialog::CIMSSettingsDialog(
+ CIMSSettingsUi& aDialog,
+ CImumInternalApiImpl& aMailboxApi,
+ CEikFormattedCellListBox& aListBox,
+ CAknTitlePane& aTitlePane,
+ CMuiuFlags& aFlags )
+ :
+ CIMSSettingsBaseUI(
+ aDialog, aMailboxApi, aListBox,
+ aTitlePane, aFlags ),
+ iInitArray( NULL ),
+ iInitSetFlag( EDialogLastFlag ),
+ iInitCurrentIndex( KErrNotFound ),
+ iInitResource( 0 )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::CIMSSettingsDialog, 0, KLogUi );
+
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::ConstructL(
+ CEikButtonGroupContainer& aSoftkeys,
+ CImumInSettingsData& aMailboxSettings )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::ConstructL, 0, KLogUi );
+
+ iIdle = CIdle::NewL( CActive::EPriorityHigh );
+
+ // Add the complete menu tree to settings
+ BaseUiConstructL( aSoftkeys, R_IMAS_MAIN_MENU, ETrue );
+
+ // Clear the flags
+ for ( TInt flag = EDialogLastFlag; --flag >= 0; )
+ {
+ Flag( flag );
+ }
+
+ // Create default data set
+ iAccountSettings =
+ CImumMboxSymbianDataConverter::ConvertToSymbianMboxDataLC(
+ iMailboxApi, aMailboxSettings );
+ CleanupStack::Pop( iAccountSettings );
+
+ // Set always online flag
+ ChangeFlag( EDialogAlwaysOnlineOn,
+ iAccountSettings->iExtendedSettings->AlwaysOnlineState() !=
+ EMailAoOff );
+
+ // Set mail message notification flag
+ ChangeFlag( EDialogOmaEmnOn,
+ iAccountSettings->iExtendedSettings->EmailNotificationState() !=
+ EMailEmnOff );
+
+ // Prepare the init arrays
+ iInitTreeArray =
+ new ( ELeave ) CMuiuDynInitItemIdArray( KMuiuDynArrayGranularity );
+ iInitIdArray =
+ new ( ELeave ) CMuiuDynInitItemIdArray( KMuiuDynArrayGranularity );
+ iInitValueArray =
+ new ( ELeave ) CMuiuDynInitItemValueArray(
+ KMuiuDynArrayGranularity );
+ iInitTextArray =
+ new ( ELeave ) CMuiuDynInitItemTextArray(
+ KMuiuDynArrayGranularity );
+ iInitInfoArray =
+ new ( ELeave ) CMuiuDynInitInfoArray( KMuiuDynArrayGranularity );
+
+ // The main menu is about to open, so initialize it
+ InitializeArrayMainMenu();
+
+ // Set the titlepane text
+ SetTitlePaneTextL( iAccountSettings->iName, ETrue );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::~CIMSSettingsDialog()
+// ----------------------------------------------------------------------------
+//
+CIMSSettingsDialog::~CIMSSettingsDialog()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::~CIMSSettingsDialog, 0, KLogUi );
+
+ delete iItemApprover;
+ iItemApprover = NULL;
+ delete iInitArray;
+ iInitArray = NULL;
+ delete iTempText;
+ iTempText = NULL;
+ delete iInitTreeArray;
+ iInitTreeArray = NULL;
+ delete iInitIdArray;
+ iInitIdArray = NULL;
+ delete iInitValueArray;
+ iInitValueArray = NULL;
+ delete iInitInfoArray;
+ iInitInfoArray = NULL;
+
+ if ( iInitTextArray )
+ {
+ iInitTextArray->ResetAndDestroy();
+ }
+
+ delete iInitTextArray;
+ iInitTextArray = NULL;
+ delete iAccountSettings;
+ iAccountSettings = NULL;
+ delete iIdle;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::NewL()
+// ----------------------------------------------------------------------------
+//
+CIMSSettingsDialog* CIMSSettingsDialog::NewL(
+ CIMSSettingsUi& aDialog,
+ CImumInternalApiImpl& aMailboxApi,
+ CEikFormattedCellListBox& aListBox,
+ CAknTitlePane& aTitlePane,
+ CEikButtonGroupContainer& aButtons,
+ CMuiuFlags& aFlags,
+ CImumInSettingsData& aMailboxSettings )
+ {
+ IMUM_STATIC_CONTEXT( CIMSSettingsDialog::NewL, 0, utils, KLogUi );
+
+ CIMSSettingsDialog* self = NewLC(
+ aDialog, aMailboxApi, aListBox,
+ aTitlePane, aButtons, aFlags, aMailboxSettings );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::NewLC()
+// ----------------------------------------------------------------------------
+//
+CIMSSettingsDialog* CIMSSettingsDialog::NewLC(
+ CIMSSettingsUi& aDialog,
+ CImumInternalApiImpl& aMailboxApi,
+ CEikFormattedCellListBox& aListBox,
+ CAknTitlePane& aTitlePane,
+ CEikButtonGroupContainer& aButtons,
+ CMuiuFlags& aFlags,
+ CImumInSettingsData& aMailboxSettings )
+ {
+ IMUM_STATIC_CONTEXT( CIMSSettingsDialog::NewLC, 0, utils, KLogUi );
+
+ CIMSSettingsDialog* self =
+ new ( ELeave ) CIMSSettingsDialog(
+ aDialog, aMailboxApi, aListBox,
+ aTitlePane, aFlags );
+ CleanupStack::PushL( self );
+ self->ConstructL( aButtons, aMailboxSettings );
+
+ return self;
+ }
+
+/******************************************************************************
+
+ Event and keypress handling
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::OkToExitL()
+// ----------------------------------------------------------------------------
+//
+TBool CIMSSettingsDialog::OkToExitL( const TInt /* aButtonId */ )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::OkToExitL, 0, KLogUi );
+
+ // Show query for exit
+ SetEmailSettingsState();
+
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::KeyPressSoftkey()
+// ----------------------------------------------------------------------------
+//
+TBool CIMSSettingsDialog::KeyPressSoftkey(
+ const TInt aButton )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::KeyPressSoftkey, 0, KLogUi );
+
+ if ( aButton == EAknSoftkeyBack )
+ {
+ if ( Flag( EDialogMainMenu ) )
+ {
+ SetFlag( EImumSettingShouldClose );
+ SetPreviousTitlePaneText();
+ }
+ else
+ {
+ // Go backwards to previous setting page
+ // Panic if any error
+ TRAPD( error, HandleStackBackwardL() );
+
+ if ( error != KErrNone )
+ {
+ __ASSERT_DEBUG( EFalse,
+ User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+ //Not crucial, should not leave
+ TRAP_IGNORE( UpdateMskL() );
+ }
+ }
+
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::KeyPressOKButtonL()
+// ----------------------------------------------------------------------------
+//
+TBool CIMSSettingsDialog::KeyPressOKButtonL( const TInt aButton )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::KeyPressOKButtonL, 0, KLogUi );
+
+ // Get the currently selected item
+ CMuiuSettingBase* base = CurrentItem();
+ __ASSERT_DEBUG( base != NULL,
+ User::Panic( KIMSSettingsDialogPanic, KErrNotFound ) );
+
+ // When Options->Change is selected, then the menu should
+ // be opened, no matter what
+ base->iItemFlags.ChangeFlag( EMuiuDynItemOneTimeForceViewOpen,
+ aButton == EAknSoftkeySelect );
+
+ TMuiuPageResult result = OpenSettingPageL( *base );
+
+ // Continue opening the page, until the setting is approved
+ if ( result == EMuiuPageResultOk )
+ {
+ SetStoreFlags( ETrue, GetStorerFlag( *base ) );
+ }
+ // For read only items, show special error note
+ else if ( result == EMuiuPageResultReadOnly )
+ {
+ TMuiuSettingsText empty;
+ iNoteUi->ShowDialog( *base, EIMSItemInvalid, empty );
+ }
+ else if ( result == EMuiuPageResultPageLocked )
+ {
+ CIMSSettingsNoteUi::ShowNoteL(
+ R_QTN_SELEC_PROTECTED_SETTING,
+ EIMSInformationNote );
+ }
+ else
+ {
+ // other cases can be skipped
+ }
+
+ return ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventSubArrayChangeL
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::EventSubArrayChangeL(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventSubArrayChangeL, 0, KLogUi );
+
+ // Set the flag to indicate main menu is active/inactive
+ ChangeFlag( EDialogMainMenu,
+ aBaseItem.iItemResourceId == R_IMAS_MAIN_MENU );
+
+ // In case new item is provided, do settings open
+ HandleSubMenuOpenL( aBaseItem );
+
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventItemEditStartsL
+// ----------------------------------------------------------------------------
+//
+TMuiuPageEventResult CIMSSettingsDialog::EventItemEditStartsL(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventItemEditStartsL, 0, KLogUi );
+
+ TMuiuPageEventResult result = EMuiuPageEventResultDisapproved;
+
+ switch ( aBaseItem.iItemId.iUid )
+ {
+ case EIMASIncomingIap:
+ case EIMASOutgoingIap:
+ LaunchIapPageL( aBaseItem );
+ break;
+
+ case EIMASUserFolderSubscription:
+ SubscribeFoldersL();
+ break;
+
+ case EIMASIncomingPort:
+ case EIMASOutgoingPort:
+ // Set port setting dialog resource
+ SetSettingPageResource(
+ EIPRNumber,
+ R_IMAS_SETTINGS_DIALOG_FIVE_DIGITS );
+ result = EMuiuPageEventResultApproved;
+ break;
+
+ case EIMASIncomingMailboxName:
+ case EIMASIncomingMailServer:
+ case EIMASIncomingUserName:
+ case EIMASOutgoingEmailAddress:
+ case EIMASOutgoingMailServer:
+ case EIMASOutgoingUserName:
+ case EIMASUserReplyTo:
+ // Set text dialog to lower case (abc) when needed
+ SetSettingPageResource( EIPRText, R_IMAS_SETTINGS_DIALOG_TEXT );
+ result = EMuiuPageEventResultApproved;
+ break;
+
+ default:
+ result = EMuiuPageEventResultApproved;
+ break;
+ }
+
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventItemEditEndsL
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::EventItemEditEndsL(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventItemEditEndsL, 0, KLogUi );
+
+ switch ( aBaseItem.iItemId.iUid )
+ {
+ // After the editing of the access point item has finished,
+ // update the setting item
+ case EIMASIncomingIap:
+ case EIMASOutgoingIap:
+ UpdateAccessPointItem( aBaseItem );
+ UpdateAOIntervalsL();
+ break;
+
+ case EIMASDownloadRetrievedParts:
+ IncludePartialFetchString( aBaseItem );
+ break;
+
+ case EIMASLimitInbox:
+ case EIMASLimitFolders:
+ UpdateItemText( aBaseItem.iItemId );
+ break;
+
+ case EIMASIncomingPort:
+ case EIMASOutgoingPort:
+ UpdateItemText( aBaseItem.iItemId );
+ break;
+
+ // Make sure that port setting item is updated, if user has selected
+ // default, otherwise it will be overwritten when exiting settings.
+ case EIMASIncomingSecurity:
+ CheckPort( *GetItem( ToUid( EIMASIncomingPort ) ), ETrue );
+ break;
+
+ // Make sure that port setting item is updated, if user has selected
+ // default, otherwise it will be overwritten when exiting settings.
+ case EIMASOutgoingSecurity:
+ CheckPort( *GetItem( ToUid( EIMASOutgoingPort ) ), EFalse );
+ break;
+
+ // After editing the always online setting, the hidden items in the
+ // array has to be revealed for editing; or they need to be hidden
+ // if the Always Online is turned off
+ case EIMASAORolling:
+ EventUpdateAlwaysOnline( aBaseItem.Value() );
+ break;
+
+ // After the Always Online days setting item is closed, check the
+ // settings and update the setting text according to new value
+ case EIMASAODays:
+ EventUpdateAoDays( aBaseItem );
+ break;
+
+ case EIMASMailNotifications:
+ EventUpdateMailNotifications( aBaseItem.Value() );
+ break;
+
+ // if user have selected deletion phone only settings
+ // we should tell user that email headers will stay on phone
+ case EIMASUserMailDeletion:
+ if ( aBaseItem.Value() == EIMASMailDeletionPhone )
+ {
+ CIMSSettingsNoteUi::ShowNoteL(
+ R_IMUM_HEADER_WILL_REMAIN_PHONE,
+ EIMSInformationNote, ETrue );
+ }
+ break;
+ case EIMASIncomingMailboxName:
+ SetTitlePaneTextL( *aBaseItem.Text(), EFalse );
+
+ break;
+ default:
+ break;
+ }
+
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventItemEvaluateText()
+// ----------------------------------------------------------------------------
+//
+TMuiuPageEventResult CIMSSettingsDialog::EventItemEvaluateText(
+ const CMuiuSettingBase& aBaseItem,
+ TDes& aNewText )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventItemEvaluateText, 0, KLogUi );
+
+ // Evaluate the item on fly
+ TIMSApproverEvent event;
+ TMuiuPageEventResult result =
+ iItemApprover->EvaluateText( event, aBaseItem, aNewText );
+
+ if ( result == EMuiuPageEventResultApproved )
+ {
+ // Handle possible events
+ EventHandleApproverEvent( event );
+ }
+
+ return result;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventItemEvaluateRadioButton()
+// ----------------------------------------------------------------------------
+//
+TMuiuPageEventResult CIMSSettingsDialog::EventItemEvaluateRadioButton(
+ const CMuiuSettingBase& aBaseItem,
+ TInt& aNewValue )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventItemEvaluateRadioButton, 0, KLogUi );
+
+ // Evaluate the item on fly
+ TIMSApproverEvent event;
+ TMuiuPageEventResult result =
+ iItemApprover->EvaluateValue( event, aBaseItem, aNewValue );
+
+ if ( result == EMuiuPageEventResultApproved )
+ {
+ // Handle possible events
+ EventHandleApproverEvent( event );
+ }
+
+ return result;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::IncludePartialFetchString()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::IncludePartialFetchString(
+ CMuiuSettingBase& aRetrievedParts )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::IncludePartialFetchString, 0, KLogUi );
+
+ TInt index = KErrNotFound;
+ TUid id;
+ CMuiuSettingsLinkExtended* retrievedParts =
+ static_cast<CMuiuSettingsLinkExtended*>( &aRetrievedParts );
+
+ // Check if partial fetch is selected
+ if ( FindCheckedRadiobutton( *retrievedParts, id, index ) == KErrNone &&
+ id.iUid == EIMASBtnRetrieveLimit )
+ {
+ CMuiuSettingBase* subItem = SettingFindEditor( *retrievedParts, id );
+
+ // Finally, set the text accoding to item
+ TMuiuSettingsText settingText;
+ CIMSSettingsNoteUi::MakeString( settingText,
+ R_IMAS_SETTINGS_MAIL_FETCH_LESS_VALUE, subItem->Value() );
+
+ retrievedParts->iItemSettingText->Copy( settingText );
+ }
+
+ Refresh();
+ }
+
+/******************************************************************************
+
+ Array initialization
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::GetUninitializedItem()
+// ----------------------------------------------------------------------------
+//
+CMuiuSettingBase* CIMSSettingsDialog::GetUninitializedItem(
+ const TUid& aId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::GetUninitializedItem, 0, KLogUi );
+
+ // At first, find the item and get its resource id, then
+ // use the resource id to initialize the actual array.
+ CMuiuSettingBase* base = GetItem( aId );
+
+ if ( base )
+ {
+ TRAP_IGNORE( InitializeArrayL( base->iItemResourceId ) );
+ }
+
+ // After item initialization is done, the item can be returned
+ return base;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::HandleSubMenuOpenL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::HandleSubMenuOpenL(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::HandleSubMenuOpenL, 0, KLogUi );
+
+ InitializeArrayL( aBaseItem.iItemResourceId );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArray()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayL( const TInt aResource )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayL, 0, KLogUi );
+
+ iInitResource = aResource;
+
+ switch ( iInitResource )
+ {
+ case R_IMAS_MAIN_MENU:
+ InitializeArrayMainMenu();
+ break;
+
+ case R_IMAS_INCOMING_SETTINGS:
+ InitializeArrayIncomingL();
+ break;
+
+ case R_IMAS_OUTGOING_SETTINGS:
+ InitializeArrayOutgoingL();
+ break;
+
+ case R_IMAS_USER_PREFERENCES:
+ InitializeArrayUserPrefL();
+ break;
+
+ case R_IMAS_RETRIEVAL_LIMIT:
+ InitializeArrayRetLimitL();
+ break;
+
+ case R_IMAS_DOWNLOAD_SETTINGS:
+ InitializeArrayDownloadL();
+ break;
+
+ case R_IMAS_ALWAYSONLINE_SETTINGS:
+ InitializeArrayAlwaysOnlineL();
+ break;
+
+ case R_IMAS_MAILBOX_MENU:
+ default:
+ // Buttons are not needed to be initialized separately
+ break;
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeNewResourceL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeNewResourceL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeNewResourceL, 0, KLogUi );
+
+ // Delete the previous item before acquiring the new one
+ delete iInitArray;
+ iInitArray = NULL;
+
+ iInitArray = GetResourceLC( iInitResource, EFalse );
+ CleanupStack::Pop( iInitArray );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeItem()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeItem(
+ CMuiuDynFinderItemArray& aArray,
+ const TInt aIndex,
+ const TInt aValue,
+ const TMuiuSettingsText* aText )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeItem, 0, KLogUi );
+
+ // Try initilizing the item
+ if ( aIndex >= 0 && aIndex < aArray.Count() )
+ {
+ TInt error = InitAnyItem(
+ *aArray.At( aIndex ).iItem, aValue, aText );
+
+ // Set Initialize flags
+ SetInitializeFlags( error );
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, User::Panic(
+ KIMSSettingsDialogPanic, KErrUnknown ) );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeItem()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeItem(
+ CMuiuSettingBase& aBaseItem,
+ const TInt aValue,
+ const TMuiuSettingsText* aText )
+ {
+ // Try initilizing the item
+ TInt error = InitAnyItem( aBaseItem, aValue, aText );
+
+ // If initializing has failed, it means the item needs to be saved again
+ SetInitializeFlags( error );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeNext()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeNext(
+ const TUid& aItemId,
+ const TMuiuSettingsText& aText )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeNext, 0, KLogUi );
+
+ // Fetch next item
+ CMuiuSettingBase* base = NextItemSearch( aItemId );
+
+ // Validate the item
+ TInt error = KErrNone;
+
+ // Finish item
+ error = InitAnyItem( *base, KErrNotFound, &aText );
+
+ // If initializing has failed, it means the item needs to be saved again
+ SetInitializeFlags( error );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeNext()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeNext(
+ const TUid& aItemId,
+ const TInt aValue,
+ const TMuiuSettingsText& aText )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeNext, 0, KLogUi );
+
+ // Validate the item
+ TInt error = InitAnyItem(
+ *NextItemSearch( aItemId ), aValue, &aText );
+
+ // If initializing has failed, it means the item needs to be saved again
+ SetInitializeFlags( error );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeNext()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeNext(
+ const TUid& aItemId,
+ const TPtrC8& aText )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeNext, 0, KLogUi );
+
+ TMuiuSettingsText buffer;
+ buffer.Copy( aText );
+
+ // Set next item
+ InitializeNext( aItemId, buffer );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeNext()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeNext(
+ const TUid& aItemId,
+ const TInt aValue )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeNext, 0, KLogUi );
+
+ // Fetch next item
+ CMuiuSettingBase* base = NextItemSearch( aItemId );
+
+ // Validate the item
+ TInt error = InitAnyItem( *base, aValue, NULL );
+
+ // If initializing has failed, it means the item needs to be saved again
+ SetInitializeFlags( error );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeResetArrays()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeResetArrays()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeResetArrays, 0, KLogUi );
+
+ iInitTreeArray->Reset();
+ iInitIdArray->Reset();
+ iInitValueArray->Reset();
+ iInitInfoArray->Reset();
+ iInitTextArray->ResetAndDestroy();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayMainMenu()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayMainMenu()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayMainMenu, 0, KLogUi );
+
+ if ( Flag( EDialogMainMenuInitialized ) )
+ {
+ return;
+ }
+
+ // Set flags
+ SetFlag( EDialogMainMenuInitialized );
+ SetFlag( EDialogMainMenu );
+
+ // Hide items that can be hidden
+ HideItemsPermanently();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayIncomingL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayIncomingL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayIncomingL, 0, KLogUi );
+
+ // Check if the item is already initialized
+ if ( Flag( EDialogIncomingInitialized ) )
+ {
+ return;
+ }
+
+ // Set flag
+ SetFlag( EDialogIncomingInitialized );
+
+ // The settings for imap4 and pop3 differs
+ if ( iAccountSettings->iIsImap4 )
+ {
+ InitializeArrayIncomingImap4L();
+ }
+ else
+ {
+ InitializeArrayIncomingPop3L();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayIncomingImap4L()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayIncomingImap4L()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayIncomingImap4L, 0, KLogUi );
+
+ // Prepare for initialize
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogIncomingChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // User name
+ InitializeUsername( ToUid( EIMASIncomingUserName ),
+ iAccountSettings->iImap4Settings->LoginName() );
+
+ // User password
+ InitializePassword( ToUid( EIMASIncomingUserPwd ),
+ iAccountSettings->iImap4Settings->Password(),
+ EIMASStatusTempRcvPassword );
+
+ // Used mail server
+ InitializeNext( ToUid( EIMASIncomingMailServer ),
+ iAccountSettings->iImap4Settings->ServerAddress() );
+
+ // Access point in use
+ TInt error = InitializeIap( ToUid( EIMASIncomingIap ) );
+ SetFlags( error, EDialogIncomingIapNotOk );
+
+ // Mailbox name
+ InitializeNext( ToUid( EIMASIncomingMailboxName ),
+ iAccountSettings->iName );
+
+ // Mailbox type (Read only)
+ InitializeNext( ToUid( EIMASIncomingProtocol ),
+ iAccountSettings->iIsImap4 );
+
+ // Security & Port
+ InitializeSecuritySettings( ToUid( EIMASIncomingSecurity ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayIncomingPop3L()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayIncomingPop3L()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayIncomingPop3L, 0, KLogUi );
+
+ // Prepare for initialize
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogIncomingChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // User name
+ InitializeUsername( ToUid( EIMASIncomingUserName ),
+ iAccountSettings->iPop3Settings->LoginName() );
+
+ // User password
+ InitializePassword( ToUid( EIMASIncomingUserPwd ),
+ iAccountSettings->iPop3Settings->Password(),
+ EIMASStatusTempRcvPassword );
+
+ // Used mail server
+ InitializeNext( ToUid( EIMASIncomingMailServer ),
+ iAccountSettings->iPop3Settings->ServerAddress() );
+
+ // Access point in use
+ TInt error = InitializeIap( ToUid( EIMASIncomingIap ) );
+ SetFlags( error, EDialogIncomingIapNotOk );
+
+ // Mailbox name
+ InitializeNext( ToUid( EIMASIncomingMailboxName ),
+ iAccountSettings->iName );
+
+ // Mailbox type (Read only)
+ InitializeNext( ToUid( EIMASIncomingProtocol ),
+ iAccountSettings->iIsImap4 );
+
+ // Security & Port
+ InitializeSecuritySettings( ToUid( EIMASIncomingSecurity ) );
+
+ // APOP secure login
+ InitializeNext( ToUid( EIMASIncomingAPop ),
+ iAccountSettings->iPop3Settings->Apop() ?
+ EIMASOn : EIMASOff );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayOutgoingL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayOutgoingL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayOutgoingL, 0, KLogUi );
+
+ // Check if the item is already initialized
+ if ( Flag( EDialogOutgoingInitialized ) )
+ {
+ return;
+ }
+
+ // Set flag
+ SetFlag( EDialogOutgoingInitialized );
+
+ // initialize
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogOutgoingChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Email address
+ InitializeNext( ToUid( EIMASOutgoingEmailAddress ),
+ iAccountSettings->iSmtpSettings->EmailAddress() );
+
+ // User name
+ InitializeUsername( ToUid( EIMASOutgoingUserName ),
+ iAccountSettings->iSmtpSettings->LoginName() );
+
+ // User password
+ InitializePassword( ToUid( EIMASOutgoingUserPwd ),
+ iAccountSettings->iSmtpSettings->Password(),
+ EIMASStatusTempSndPassword );
+
+ // Used mail server
+ InitializeNext( ToUid( EIMASOutgoingMailServer ),
+ iAccountSettings->iSmtpSettings->ServerAddress() );
+
+ // Access point in use
+ TInt error = InitializeIap( ToUid( EIMASOutgoingIap ) );
+ SetFlags( error, EDialogOutgoingIapNotOk );
+
+ // Security & Port
+ InitializeSecuritySettings( ToUid( EIMASOutgoingSecurity ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayUserPrefL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayUserPrefL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayUserPrefL, 0, KLogUi );
+
+ // Check if the item is already initialized
+ if ( Flag( EDialogUserPrefInitialized ) )
+ {
+ return;
+ }
+
+ // Set flag
+ SetFlag( EDialogUserPrefInitialized );
+
+ // Prepare for initialize
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogUserPrefChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Own Name
+ InitializeNext( ToUid( EIMASUserOwnName ),
+ iAccountSettings->iSmtpSettings->EmailAlias() );
+
+ // Send Message
+ InitializeNext( ToUid( EIMASUserSendMsg ),
+ iAccountSettings->iSmtpSettings->SendMessageOption() ==
+ ESendMessageImmediately ? EImmediately : EOnNextConnection );
+
+ // Send copy to self
+ InitializeNext( ToUid( EIMASUserSendCopy ),
+ iAccountSettings->iSmtpSettings->SendCopyToSelf() == ESendNoCopy );
+
+ // Include Signature
+ InitializeSignature();
+
+ // Show HTML mails
+ InitializeNext( ToUid( EIMASUserShowHtml ),
+ iAccountSettings->iExtendedSettings->OpenHtmlMail() ?
+ EIMASYes : EIMASNo );
+
+ // New mail indicators
+ InitializeNext( ToUid( EIMASUserNewMailInd ),
+ iAccountSettings->iExtendedSettings->NewMailIndicators() ?
+ EIMASYes : EIMASNo );
+
+ // Mail Deletion setting
+ InitializeNext( ToUid ( EIMASUserMailDeletion ),
+ iAccountSettings->iExtendedSettings->MailDeletion() ) ;
+
+ // Reply-to Address
+ InitializeNext( ToUid( EIMASUserReplyTo ),
+ iAccountSettings->iSmtpSettings->ReplyToAddress() );
+
+ // Default encoding
+ InitializeNext( ToUid( EIMASUserEncoding ),
+ iAccountSettings->iSmtpSettings->DefaultMsgCharSet().iUid );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeRetrieveLimitL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeRetrieveLimitL(
+ const TInt aLimit,
+ const TInt aId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeRetrieveLimitL, 0, KLogUi );
+
+ // Reset before initializing
+ InitializeResetArrays();
+
+ // Add id's to tree
+ iInitTreeArray->AppendL( ToUid( EIMASMainDownloadCtrl ) );
+ iInitTreeArray->AppendL( ToUid( EIMASDownloadRetrievalLimit ) );
+ iInitTreeArray->AppendL( ToUid( EIMASBtnRetrieveLimit ) );
+ iInitIdArray->AppendL( ToUid( aId ) );
+ iInitIdArray->AppendL( ToUid( EIMASBtnFetchUserDefined ) );
+ iInitValueArray->AppendL( aLimit == KErrNotFound ?
+ EIMSLimitFetchAll : EIMSLimitUserDefined );
+ iInitValueArray->AppendL( aLimit == KErrNotFound ?
+ KImumMboxDefaultInboxUpdateLimit : aLimit );
+
+ InitAnyMultiItem( NULL, *iInitIdArray, iInitValueArray, iInitTextArray );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayRetLimitL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayRetLimitL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayRetLimitL, 0, KLogUi );
+
+ // Check if the item is already initialized
+ if ( Flag( EDialogRetLimitInitialized ) )
+ {
+ if ( Flag( EDialogDownloadChanged ) )
+ {
+ // This should really be done after subscribe dialog is closed
+ CheckSubscribedFolderStateL();
+ }
+ return;
+ }
+
+ // Set flag
+ SetFlag( EDialogRetLimitInitialized );
+
+ // Prepare for initialize
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogRetLimitChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Individual handling for each protocol
+ if ( iAccountSettings->iIsImap4 )
+ {
+ // Inbox limit
+ InitializeRetrieveLimitL(
+ iAccountSettings->iImap4Settings->InboxSynchronisationLimit(),
+ EIMASLimitInbox );
+
+ // Subscribed folders limit
+ InitializeRetrieveLimitL(
+ iAccountSettings->iImap4Settings->MailboxSynchronisationLimit(),
+ EIMASLimitFolders );
+
+ CheckSubscribedFolderStateL();
+ }
+ else
+ {
+ // Inbox limit
+ InitializeRetrieveLimitL(
+ iAccountSettings->iPop3Settings->InboxSynchronisationLimit(),
+ EIMASLimitInbox );
+ }
+
+ // When always online is set, these settings can only be read
+ UpdateFetchLimitSetting();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayDownloadL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayDownloadL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayDownloadL, 0, KLogUi );
+
+ // Check if the item is already initialized
+ if ( Flag( EDialogDownloadInitialized ) )
+ {
+ return;
+ }
+
+ // Set flag
+ SetFlag( EDialogDownloadInitialized );
+
+ // Prepare for initialize
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogDownloadChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Retrieved parts
+ InitializeRetrievedParts();
+
+ // Retrieval limit
+ ++iInitCurrentIndex;
+
+ // Imap4 folder path
+ InitializeFolderPath();
+
+ // Folder subscriptions
+ ++iInitCurrentIndex;
+
+ // Del. msgs. over limit
+ InitializeNext( ToUid( EIMASDownloadMsgsOverLimit ),
+ iAccountSettings->iExtendedSettings->HideMsgs() ?
+ EIMASYes : EIMASNo );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeArrayAlwaysOnlineL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeArrayAlwaysOnlineL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeArrayAlwaysOnlineL, 0, KLogUi );
+
+ // Check if the item is already initialized
+ if ( Flag( EDialogAlOnlineInitialized ) )
+ {
+ return;
+ }
+
+ // Set flag
+ SetFlag( EDialogAlOnlineInitialized );
+
+ // EDialogCsdAccessPoint flag needed when showing AO intervals.
+ UpdateCSDFlagL();
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_ALWAYSONLINE_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Mail message notifications
+ InitializeNext( ToUid( EIMASMailNotifications ),
+ iAccountSettings->iExtendedSettings->EmailNotificationState() );
+
+ // Automatic Retrieval
+ InitializeNext( ToUid( EIMASAORolling ),
+ iAccountSettings->iExtendedSettings->AlwaysOnlineState() );
+
+ // Retrieval Days
+ InitializeAoDays();
+
+ // Retrieval hours
+ InitializeAoHoursL();
+
+ // Retrieval interval
+ InitializeAoInterval();
+
+ InitializeAlwaysOnlineState();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeAlwaysOnlineState()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeAlwaysOnlineState()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeAlwaysOnlineState, 0, KLogUi );
+
+ TBool hide = !Flag( EDialogAlwaysOnlineOn );
+
+ SetHideItem( hide, ToUid( EIMASAODays ) );
+ SetHideItem( hide, ToUid( EIMASAOHours ) );
+ SetHideItem( hide, ToUid( EIMASAOInterval ), ETrue );
+ UpdateFetchLimitSetting();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeUsername()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeUsername(
+ const TUid& aItemId,
+ const TPtrC8& aUsername )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeUsername, 0, KLogUi );
+
+ TMuiuSettingsText login;
+ login.Copy( aUsername );
+
+ InitializeNext( aItemId, login );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializePassword()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializePassword(
+ const TUid& aItemId,
+ const TPtrC8& aPassword,
+ const TInt aFlag )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializePassword, 0, KLogUi );
+
+ TMuiuSettingsText login;
+ login.Copy( aPassword );
+ TMuiuFlags flags = iAccountSettings->iExtendedSettings->StatusFlags();
+
+ if ( flags.Flag( aFlag ) )
+ {
+ login.Zero();
+ SetInitializeFlags( KErrArgument );
+ }
+
+ InitializeNext( aItemId, login );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeSignature()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializeSignature()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeSignature, 0, KLogUi );
+
+ TRAPD( error, InitializeSignatureL() );
+
+ return error;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeSignatureL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeSignatureL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeSignatureL, 0, KLogUi );
+
+ // Reset the arrays
+ InitializeResetArrays();
+
+ // Determine the button
+ TInt button = iAccountSettings->iSmtpSettings->AddSignatureToEmail() ?
+ EIMASYes : EIMASNo;
+
+ // Fetch next item
+ CMuiuSettingBase* base = NextItemSearch(
+ ToUid( EIMASUserIncludeSignature ) );
+
+ // Add the id to array and the value
+ iInitInfoArray->AppendL( EMuiuDynInitInfoValue );
+ iInitInfoArray->AppendL( EMuiuDynInitInfoText );
+ iInitIdArray->AppendL( base->iItemId );
+ iInitIdArray->AppendL( ToUid( EIMASBtnSignatureYes ) );
+ iInitValueArray->AppendL( button );
+
+ TMuiuSettingsText text;
+ iAccountSettings->iSignature->iRichText->Extract(
+ text, 0, KImasImailSignatureLength );
+ iInitTextArray->AppendL( &text );
+
+ InitAnyMultiItem(
+ NULL, *iInitIdArray, iInitValueArray, iInitTextArray, iInitInfoArray );
+ iInitTextArray->Reset();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeIap()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializeIap( const TUid& aIapItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeIap, 0, KLogUi );
+
+ CIMSSettingsAccessPointItem* apItem =
+ static_cast<CIMSSettingsAccessPointItem*>(
+ NextItemSearch( aIapItemId ) );
+
+ if ( aIapItemId.iUid == EIMASIncomingIap )
+ {
+ apItem->iIap.iId = iAccountSettings->iIncomingIap;
+ }
+ else
+ {
+ apItem->iIap.iId = iAccountSettings->iOutgoingIap;
+ }
+
+ TRAPD( err, iMailboxApi.CommDbUtilsL().
+ InitItemAccessPointL( *apItem, EFalse ) );
+
+ // Initialize the items and prepare the setting item
+ SetInitializeFlags( err );
+
+ return err;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeRetrievedParts()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializeRetrievedParts()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeRetrievedParts, 0, KLogUi );
+
+ TRAPD( error, InitializeRetrievedPartsL() );
+
+ return error;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeRetrievedPartsL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeRetrievedPartsL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeRetrievedPartsL, 0, KLogUi );
+
+ // Reset the arrays
+ InitializeResetArrays();
+
+ // Fetch next item
+ CMuiuSettingsLinkExtended* radioArray =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ NextItemSearch( ToUid( EIMASDownloadRetrievedParts ) ) );
+
+ // Add id's to tree
+ TInt button = 0;
+ TInt sizeFilter = KIMSDefaultSizeKB;
+ iInitTreeArray->AppendL( ToUid( EIMASMainDownloadCtrl ) );
+ iInitIdArray->AppendL( ToUid( EIMASDownloadRetrievedParts ) );
+ iInitIdArray->AppendL( ToUid( EIMASBtnRetrieveLimit ) );
+
+ // Handle each protocol individually
+ if ( iAccountSettings->iIsImap4 )
+ {
+ // Get the settings
+ TImImap4PartialMailOptions partial =
+ iAccountSettings->iImap4Settings->PartialMailOptions();
+ TImap4GetMailOptions options =
+ iAccountSettings->iImap4Settings->GetMailOptions();
+
+ // Define button from setting
+ // Setting can be only header, keep it so
+ button = 0;
+ }
+ else
+ {
+ sizeFilter = iAccountSettings->iPop3Settings->PopulationLimit();
+
+ // Check the headers only button
+ if ( sizeFilter == EIMASMapHeadersOnly )
+ {
+ button = GetSubItemIndex(
+ *radioArray, ToUid( EIMASBtnRetrieveHeader ), EFalse );
+ }
+ // Body and attachment
+ else if ( sizeFilter == EIMASMapFullBody )
+ {
+ button = GetSubItemIndex(
+ *radioArray, ToUid( EIMASBtnRetrieveBodyAtt ), EFalse );
+ }
+ // User defined
+ else
+ {
+ button = GetSubItemIndex(
+ *radioArray, ToUid( EIMASBtnRetrieveLimit ), EFalse );
+ }
+ }
+
+ // Initialize the items and prepare the setting item
+ sizeFilter = sizeFilter < 0 ? KIMSDefaultSizeKB : sizeFilter;
+ sizeFilter = sizeFilter > KIMSMaxNumValue ?
+ KIMSDefaultSizeKB : sizeFilter;
+
+ iInitValueArray->AppendL( button );
+ iInitValueArray->AppendL( sizeFilter );
+ InitAnyMultiItem( iInitTreeArray, *iInitIdArray, iInitValueArray );
+
+ IncludePartialFetchString( *radioArray );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeAoHoursL()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializeAoHoursL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeAoHoursL, 0, KLogUi );
+
+ TInt error = KErrNone;
+
+ // Fetch next item and its subitems
+ CMuiuSettingsLinkExtended* radioArray =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ NextItemSearch( ToUid( EIMASAOHours ) ) );
+ CMuiuSettingsEditValue* sub1 = NULL;
+ CMuiuSettingsEditValue* sub2 = NULL;
+ FindMultilineEditorL( ToUid( EIMASEditAoHoursEditor ), sub1, sub2 );
+ __ASSERT_DEBUG( sub1 && sub2, User::Panic(
+ KIMSSettingsDialogPanic, KErrNotFound ) );
+
+ sub1->SetValue(
+ iAccountSettings->iExtendedSettings->SelectedTimeStart().Int64() );
+ sub2->SetValue(
+ iAccountSettings->iExtendedSettings->SelectedTimeStop().Int64() );
+
+ // Update the status
+ if ( sub1->Value() == sub2->Value() )
+ {
+ radioArray->SetValue( EIMASAoHoursAll );
+ CheckRadioButton( *radioArray, EIMASAoHoursAll );
+
+ TRAP( error,
+ UpdateItemDefaultSettingTextL( *radioArray ) );
+ }
+ else
+ {
+ radioArray->SetValue( EIMASAoHoursUserDefined );
+ CheckRadioButton( *radioArray, EIMASAoHoursUserDefined );
+
+ TRAP( error,
+ UpdateItemCustomSettingTextL( *radioArray, *sub1, *sub2 ) );
+ }
+
+ radioArray = NULL;
+ sub1 = NULL;
+ sub2 = NULL;
+
+ return error;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeSecuritySettings()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeSecuritySettings(
+ const TUid& aSecurityItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeSecuritySettings, 0, KLogUi );
+
+ // Security
+ TIMASMailSecurity security = InitializeSecurity( aSecurityItemId );
+ InitializeNext( aSecurityItemId, security );
+
+ // Port
+ InitializePort( security, aSecurityItemId.iUid == EIMASIncomingSecurity );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeSecurity()
+// ----------------------------------------------------------------------------
+//
+TIMASMailSecurity CIMSSettingsDialog::InitializeSecurity(
+ const TUid& aSecurityItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeSecurity, 0, KLogUi );
+
+ CImBaseEmailSettings* base = NULL;
+
+ // Get the mailbox type
+ if ( aSecurityItemId.iUid == EIMASIncomingSecurity )
+ {
+ if ( iAccountSettings->iIsImap4 )
+ {
+ base = iAccountSettings->iImap4Settings;
+ }
+ else
+ {
+ base = iAccountSettings->iPop3Settings;
+ }
+ }
+ else
+ {
+ base = iAccountSettings->iSmtpSettings;
+ }
+
+ TIMASMailSecurity security( EImumSecurityOff );
+
+ // Security: TLS
+ if( base->SecureSockets() )
+ {
+ security = EImumSecurityOn;
+ }
+ // Security: MS
+ else if( base->SSLWrapper() )
+ {
+ security = EImumSecurityMs;
+ }
+ // Security Off
+ else
+ {
+ security = EImumSecurityOff;
+ }
+
+ return security;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializePort()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializePort(
+ const TIMASMailSecurity aSecurity,
+ const TBool aIncoming )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializePort, 0, KLogUi );
+
+ TRAPD( error, InitializePortL( aSecurity, aIncoming ) );
+
+ return error;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializePortL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializePortL(
+ const TIMASMailSecurity aSecurity,
+ const TBool aIncoming )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializePortL, 0, KLogUi );
+
+ // Get next item in the array
+ InitializeResetArrays();
+
+ // Add id's to list
+ TInt button = KErrNotFound;
+ TInt port = 0;
+
+ TUint32 defaultPort = MsvEmailMtmUiUtils::GetDefaultSecurityPort(
+ aSecurity, aIncoming, iAccountSettings->iIsImap4 );
+
+ // Make the first check between incoming and outgoing protocol
+ if ( aIncoming )
+ {
+ // Add id's to tree
+ iInitTreeArray->AppendL( ToUid( EIMASMailboxIncoming ) );
+ iInitIdArray->AppendL( ToUid( EIMASIncomingPort ) );
+ iInitIdArray->AppendL( ToUid( EIMASBtnPortUserDefined ) );
+
+ // Another check, this time between receiving protocol
+ if ( iAccountSettings->iIsImap4 )
+ {
+ port = iAccountSettings->iImap4Settings->Port();
+ }
+ else
+ {
+ port = iAccountSettings->iPop3Settings->Port();
+ }
+ }
+ else
+ {
+ // Add id's to tree and to id array
+ iInitTreeArray->AppendL( ToUid( EIMASMailboxOutgoing ) );
+ iInitIdArray->AppendL( ToUid( EIMASOutgoingPort ) );
+ iInitIdArray->AppendL( ToUid( EIMASBtnPortUserDefined ) );
+
+ port = iAccountSettings->iSmtpSettings->Port();
+ }
+
+ button = ( port == defaultPort ) ? EIMASPortDefault : EIMASPortUserDefined;
+ iInitValueArray->AppendL( button );
+ iInitValueArray->AppendL( port );
+ InitAnyMultiItem( iInitTreeArray, *iInitIdArray, iInitValueArray );
+
+ UpdateItemText( ToUid( EIMASIncomingPort ) );
+ UpdateItemText( ToUid( EIMASOutgoingPort ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeFolderPath()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializeFolderPath()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeFolderPath, 0, KLogUi );
+
+ TInt error = KErrNone;
+
+ // Folder path is only for IMAP4
+ if ( iAccountSettings->iIsImap4 )
+ {
+ TMuiuSettingsText buffer;
+ buffer.Copy( iAccountSettings->iImap4Settings->FolderPath() );
+
+ // In case path is not set, show default value
+ if ( !buffer.Length() )
+ {
+ HBufC* text = NULL;
+ error = SafeStringLoad( R_IMUM_SETTINGS_UNIX_PATH, text );
+
+ if ( error == KErrNone )
+ {
+ buffer.Copy( *text );
+ }
+
+ delete text;
+ text = NULL;
+ }
+
+ InitializeNext( ToUid( EIMASUserUnixPath ), buffer );
+ }
+
+ return error;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeAoDays()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::InitializeAoDays()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeAoDays, 0, KLogUi );
+
+ // Fetch the days from settings
+ TInt error = KErrNone;
+ TInt selectedDays =
+ iAccountSettings->iExtendedSettings->SelectedWeekDays();
+
+ // Make sure that all the checkbox are checked,
+ // if none of the buttons are checked
+ if ( !selectedDays )
+ {
+ selectedDays = KIMASEveryDayMask;
+ }
+
+ HBufC* text = NULL;
+ error = SafeStringLoad( ( ( selectedDays == KIMASEveryDayMask ) ?
+ R_IMAS_SETTINGS_DIALOG_DAY_LIST_ALL :
+ R_IMAS_SETTINGS_DIALOG_DAY_LIST_USERDEFINED ), text );
+
+ // Initialize item
+ InitializeNext( ToUid( EIMASAODays ), selectedDays, *text );
+
+ delete text;
+ text = NULL;
+
+ return error;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeAoIntervalButtons()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeAoIntervalButtons(
+ TInt& aInterval )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeAoIntervalButtons, 0, KLogUi );
+
+ TBool csd = Flag( EDialogCsdAccessPoint );
+
+ TBool hide5and15minutes(EFalse);
+ TBool hide60minutes(EFalse);
+
+ //5 and 15 minute intervals hidden for CSD
+ SetHideItem( csd, ToUid( EIMASBtnAo5Min ) );
+ SetHideItem( csd, ToUid( EIMASBtnAo15Min ) );
+ hide5and15minutes = csd;
+
+ SetStoreFlags( ETrue, EIMASAOInterval );
+
+ // interval is 0 only when account is first created
+ // if interval is one of the hidden values it is changed to default.
+ if ( aInterval == 0 || ( hide5and15minutes & (
+ ( aInterval == KIMASAoInterval5Min ) ||
+ ( aInterval == KIMASAoInterval15Min ) ) ) ||
+ ( hide60minutes & (aInterval == KIMASAoInterval1Hour ) ) )
+ {
+ //with default connection feature, we use 1 hour
+ //default for both imap and pop.
+ aInterval = KIMASAoInterval1Hour;
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeAoIntervalEditor()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeAoIntervalEditor(
+ TInt& aInterval,
+ HBufC*& aText )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeAoIntervalEditor, 0, KLogUi );
+
+ TInt intervalResource = 0;
+ InitializeAoIntervalButtons( aInterval );
+
+ switch ( aInterval )
+ {
+ case KIMASAoInterval5Min:
+ aInterval = EIMASAoInterval5Min;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_FIRST;
+ break;
+
+ case KIMASAoInterval15Min:
+ aInterval = EIMASAoInterval15Min;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_SECOND;
+ break;
+
+ case KIMASAoInterval30Min:
+ aInterval = EIMASAoInterval30Min;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_THIRD;
+ break;
+
+ case KIMASAoInterval1Hour:
+ aInterval = EIMASAoInterval1Hour;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_FOURTH;
+ break;
+
+ default:
+ case KIMASAoInterval2Hours:
+ aInterval = EIMASAoInterval2Hours;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_FIFTH;
+ break;
+
+ case KIMASAoInterval4Hours:
+ aInterval = EIMASAoInterval4Hours;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_SIXTH;
+ break;
+
+ case KIMASAoInterval6Hours:
+ aInterval = EIMASAoInterval6Hours;
+ intervalResource = R_IMAS_SETTINGS_DIALOG_INTERVALS_SEVENTH;
+ break;
+ }
+
+ SafeStringLoad( intervalResource, aText );
+
+ __ASSERT_DEBUG( aText != NULL, User::Panic(
+ KIMSSettingsDialogPanic, KErrNotFound ) );
+ }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::InitializeAoInterval()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::InitializeAoInterval()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::InitializeAoInterval, 0, KLogUi );
+
+ TInt interval = iAccountSettings->iExtendedSettings->InboxRefreshTime();
+ HBufC* text = NULL;
+
+ InitializeAoIntervalEditor( interval, text );
+
+ // If the text can't be fetched
+ if ( text )
+ {
+ InitializeNext( ToUid( EIMASAOInterval ), interval, *text );
+ delete text;
+ text = NULL;
+ }
+ else
+ {
+ InitializeNext( ToUid( EIMASAOInterval ), interval );
+ }
+ }
+
+
+/******************************************************************************
+
+ Setting validating
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsToAccountL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsToAccountL(
+ CImumInSettingsData& aSettings )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsToAccountL, 0, KLogUi );
+
+ // This function is called, when user is about to exit the mailbox
+ // settings. This function checks if changes are made for any settings
+ // and stores the changed settings.
+
+ TInt error = KErrNone;
+ // Incoming settings
+ if ( Flag( EDialogIncomingChanged ) )
+ {
+ TRAP( error, StoreSettingsIncomingL() );
+ __ASSERT_DEBUG( !error, User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+
+ // Outgoing settings
+ if ( Flag( EDialogOutgoingChanged ) )
+ {
+ TRAP( error, StoreSettingsOutgoingL() );
+ __ASSERT_DEBUG( !error, User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+
+ // User preferences
+ if ( Flag( EDialogUserPrefChanged ) )
+ {
+ TRAP( error, StoreSettingsUserPrefL() );
+ __ASSERT_DEBUG( !error, User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+
+ // Retrieval limit
+ if ( Flag( EDialogRetLimitChanged ) )
+ {
+ TRAP( error, StoreSettingsRetLimitL() );
+ __ASSERT_DEBUG( !error, User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+
+ // Download preferences
+ if ( Flag( EDialogDownloadChanged ) )
+ {
+ TRAP( error, StoreSettingsDownloadL() );
+ __ASSERT_DEBUG( !error, User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+
+ // Always Online settings
+ if ( Flag( EDialogAlOnlineChanged ) )
+ {
+ TRAP( error, StoreSettingsAlwaysOnlineL() );
+ __ASSERT_DEBUG( !error, User::Panic( KIMSSettingsDialogPanic, error ) );
+ }
+
+ User::LeaveIfError( error );
+ CImumMboxInternalDataConverter::ConvertToInternalMboxDataL(
+ iMailboxApi, *iAccountSettings, aSettings );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsIncomingL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsIncomingL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsIncomingL, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_INCOMING_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Get the protocol and store it
+ if ( iAccountSettings->iIsImap4 )
+ {
+ StoreSettingsIncomingImap4L();
+ }
+ else
+ {
+ StoreSettingsIncomingPop3L();
+ }
+
+ // clear last retrieval status
+ TAOInfo emptyInfo = iAccountSettings->iExtendedSettings->LastUpdateInfo();
+ emptyInfo.iUpdateSuccessfulWithCurSettings = EFalse;
+ iAccountSettings->iExtendedSettings->SetLastUpdateInfo(
+ emptyInfo );
+
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsIncomingImap4L()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsIncomingImap4L()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsIncomingImap4L, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_INCOMING_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // User name
+ iAccountSettings->iImap4Settings->SetLoginNameL(
+ StoreUsername( *StoreGetNextText(
+ ToUid( EIMASIncomingUserName ) ) ) );
+
+ // User password
+ iAccountSettings->iImap4Settings->SetPasswordL(
+ StorePassword( *StoreGetNextText( ToUid( EIMASIncomingUserPwd ) ),
+ EIMASStatusTempRcvPassword ) );
+
+ // Used mail server
+ iAccountSettings->iImap4Settings->SetServerAddressL(
+ *StoreGetNextText( ToUid( EIMASIncomingMailServer ) ) );
+
+ // Access point in use
+ StoreSettingsIapL( ETrue );
+
+ // Mailbox name
+ iAccountSettings->iName.Copy(
+ *StoreGetNextText( ToUid( EIMASIncomingMailboxName ) ) );
+
+ // Mailbox type (Readonly)
+ ++iInitCurrentIndex;
+
+ // Security
+ StoreSettingsSecurityL( ETrue );
+
+ // Port
+ StorePortL( ETrue );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsIncomingPop3L()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsIncomingPop3L()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsIncomingPop3L, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_INCOMING_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // User name
+ iAccountSettings->iPop3Settings->SetLoginNameL(
+ StoreUsername( *StoreGetNextText(
+ ToUid( EIMASIncomingUserName ) ) ) );
+
+ // User password
+ iAccountSettings->iPop3Settings->SetPasswordL(
+ StorePassword( *StoreGetNextText( ToUid( EIMASIncomingUserPwd ) ),
+ EIMASStatusTempRcvPassword ) );
+
+ // Used mail server
+ iAccountSettings->iPop3Settings->SetServerAddressL(
+ *StoreGetNextText( ToUid( EIMASIncomingMailServer ) ) );
+
+ // Access point in use
+ StoreSettingsIapL( ETrue );
+
+ // Mailbox name
+ iAccountSettings->iName.Copy( *StoreGetNextText(
+ ToUid( EIMASIncomingMailboxName ) ) );
+
+ // Mailbox type (Readonly)
+ ++iInitCurrentIndex;
+
+ // Security
+ StoreSettingsSecurityL( ETrue );
+
+ // Port
+ StorePortL( ETrue );
+
+ // APOP secure login
+ iAccountSettings->iPop3Settings->SetApop(
+ StoreGetNextBoolean( ToUid( EIMASIncomingAPop ) ) == EIMASOn ?
+ ETrue : EFalse );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsOutgoingL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsOutgoingL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsOutgoingL, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_OUTGOING_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ const TDesC& emailAddress = *StoreGetNextText(
+ ToUid( EIMASOutgoingEmailAddress ) );
+
+ // Email address
+ iAccountSettings->iSmtpSettings->SetEmailAddressL( emailAddress );
+
+ // Email address must be updated also to extended settings
+ iAccountSettings->iExtendedSettings->SetEmailAddress( emailAddress );
+
+ // User name
+ iAccountSettings->iSmtpSettings->SetLoginNameL(
+ StoreUsername( *StoreGetNextText(
+ ToUid( EIMASOutgoingUserName ) ) ) );
+
+ // User password
+ iAccountSettings->iSmtpSettings->SetPasswordL(
+ StorePassword( *StoreGetNextText( ToUid( EIMASOutgoingUserPwd ) ),
+ EIMASStatusTempSndPassword ) );
+
+ // Used mail server
+ iAccountSettings->iSmtpSettings->SetServerAddressL(
+ *StoreGetNextText( ToUid( EIMASOutgoingMailServer ) ) );
+
+ // Access point in use
+ StoreSettingsIapL( EFalse );
+
+ // Security
+ StoreSettingsSecurityL( EFalse );
+
+ // Port
+ StorePortL( EFalse );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsUserPrefL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsUserPrefL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsUserPrefL, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_USER_PREFERENCES;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Own Name
+ iAccountSettings->iSmtpSettings->SetEmailAliasL(
+ *StoreGetNextText( ToUid( EIMASUserOwnName ) ) );
+
+ // Send Message
+ iAccountSettings->iSmtpSettings->SetSendMessageOption(
+ StoreGetNextBoolean( ToUid( EIMASUserSendMsg ) ) ?
+ ESendMessageOnNextConnection : ESendMessageImmediately );
+
+ TImSMTPSendCopyToSelf sendCopy = StoreGetNextBoolean( ToUid( EIMASUserSendCopy ) ) ?
+ ESendNoCopy : ESendCopyAsCcRecipient;
+ // Send copy to self
+ iAccountSettings->iSmtpSettings->SetSendCopyToSelf(sendCopy);
+
+ if(sendCopy == ESendCopyAsCcRecipient)
+ {
+ iAccountSettings->iSmtpSettings->SetReceiptAddressL(iAccountSettings->iSmtpSettings->EmailAddress());
+ }
+ else
+ {
+ iAccountSettings->iSmtpSettings->SetReceiptAddressL(KNullDesC);
+ }
+
+
+ // Include Signature
+ StoreSettingsSignature();
+
+ // Show HTML mails
+ iAccountSettings->iExtendedSettings->SetOpenHtmlMail(
+ StoreGetNextBoolean( ToUid( EIMASUserShowHtml ) ) == EIMASYes ?
+ ETrue : EFalse );
+
+ // New mail indicators
+ iAccountSettings->iExtendedSettings->SetNewMailIndicators(
+ StoreGetNextBoolean( ToUid( EIMASUserNewMailInd ) ) == EIMASYes ?
+ ETrue : EFalse );
+
+ // Mail deletion
+ iAccountSettings->iExtendedSettings->SetMailDeletion(
+ static_cast< TIMASMailDeletionMode >(
+ StoreGetNextValue( ToUid( EIMASUserMailDeletion ) ) ) );
+
+ // Reply-to Address
+ const TDesC& replyToAddress = *StoreGetNextText(
+ ToUid( EIMASUserReplyTo ) );
+ iAccountSettings->iSmtpSettings->SetReplyToAddressL( replyToAddress );
+
+ // Default encoding
+ iAccountSettings->iSmtpSettings->SetDefaultMsgCharSet(
+ TUid::Uid( StoreGetNextValue( ToUid( EIMASUserEncoding ) ) ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsSignature()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsSignature()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsSignature, 0, KLogUi );
+
+ // First get the radio button value
+ CMuiuSettingBase* baseItem = GetItem( ToUid( EIMASUserIncludeSignature ) );
+ iAccountSettings->iSmtpSettings->SetAddSignatureToEmail(
+ baseItem->Value() == EIMASYes ? ETrue : EFalse );
+
+ // Second get the signature text
+ baseItem = SettingFindEditor( *baseItem, ToUid( EIMASBtnSignatureYes ) );
+ iAccountSettings->iSignature->iRichText->Reset();
+ TRAP_IGNORE( iAccountSettings->iSignature->iRichText->InsertL(
+ 0, *baseItem->Text() ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsRetLimitL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsRetLimitL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsRetLimitL, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_RETRIEVAL_LIMIT;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ CMuiuSettingsLinkExtended* radioEditor =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ GetItem( TUid::Uid( EIMASLimitInbox ) ) );
+ CMuiuSettingsEditValue* editor =
+ static_cast<CMuiuSettingsEditValue*>(
+ SettingFindEditor( *radioEditor, ToUid(
+ EIMASBtnFetchUserDefined ) ) );
+
+ // Imap4
+ if ( iAccountSettings->iIsImap4 )
+ {
+ // 1. Inbox limit
+ iAccountSettings->iImap4Settings->SetInboxSynchronisationLimit(
+ radioEditor->Value() == EIMSLimitFetchAll ?
+ KErrNotFound : editor->Value() );
+
+ // 2. Subscribed folders limit EIMASLimitFolders
+ radioEditor = static_cast<CMuiuSettingsLinkExtended*>(
+ GetItem( TUid::Uid( EIMASLimitFolders ) ) );
+ CMuiuSettingsLinkExtended* editor =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ SettingFindEditor( *radioEditor, ToUid(
+ EIMASBtnFetchUserDefined ), EFalse ) );
+
+ iAccountSettings->iImap4Settings->SetMailboxSynchronisationLimit(
+ radioEditor->Value() == EIMSLimitFetchAll ?
+ KErrNotFound : editor->Value() );
+ }
+ // Pop3
+ else
+ {
+ // 1. Inbox limit
+ iAccountSettings->iPop3Settings->SetInboxSynchronisationLimit(
+ radioEditor->Value() == EIMSLimitFetchAll ?
+ KErrNotFound : editor->Value() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsDownloadL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsDownloadL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsDownloadL, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_DOWNLOAD_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Retrieved parts
+ StoreRetrievedPartsL();
+
+ // Retrieval limit
+ ++iInitCurrentIndex;
+
+ // Imap4 folder path
+ StoreFolderPathL();
+
+ // Folder subscriptions
+ ++iInitCurrentIndex;
+
+ // Del. msgs. over limit
+ iAccountSettings->iExtendedSettings->SetHideMsgs(
+ StoreGetNextBoolean( ToUid(
+ EIMASDownloadMsgsOverLimit ) ) == EIMASYes );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsAlwaysOnlineL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsAlwaysOnlineL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsAlwaysOnlineL, 0, KLogUi );
+
+ // Prepare for initialize
+ iInitResource = R_IMAS_ALWAYSONLINE_SETTINGS;
+ InitializeNewResourceL();
+ iInitSetFlag = EDialogAlOnlineChanged;
+ iInitCurrentIndex = KErrNotFound;
+
+ // Mail Message Notifications
+ iAccountSettings->iExtendedSettings->SetEmailNotificationState(
+ static_cast<TMailEmnStates>( StoreGetNextValue(
+ ToUid( EIMASMailNotifications ) ) ) );
+
+ TMailAoStates aoNewState = static_cast<TMailAoStates>(
+ StoreGetNextValue( ToUid( EIMASAORolling ) ) );
+
+ IMUM1( 0, "aoNewState = %d", aoNewState );
+
+ // Retrieval amount have to set "all" value, when always online is
+ // set on. There is also dynamic feature variation flag do always
+ // online fetch all or specific amount of headers
+
+ TBool doFetchAllVariation = MsvEmailMtmUiFeatureUtils::LocalFeatureL(
+ KCRUidMuiuVariation, KMuiuEmailConfigFlags,
+ KEmailFeatureIdAlwaysonlineHeaders );
+
+ IMUM1( 0, "doFetchAllVariation = %d", doFetchAllVariation);
+
+ // if user sets always online on, current state is OFF and new is ON
+ if( iAccountSettings->iExtendedSettings->AlwaysOnlineState() == EMailAoOff &&
+ aoNewState != EMailAoOff &&
+ doFetchAllVariation )
+ {
+ if ( iAccountSettings->iIsImap4 )
+ {
+ iAccountSettings->iImap4Settings->SetInboxSynchronisationLimit(
+ KErrNotFound );
+ }
+ else
+ {
+ iAccountSettings->iPop3Settings->SetInboxSynchronisationLimit(
+ KErrNotFound );
+ }
+
+ IMUM0( 0, "SetInboxSynchronisationLimit = ALL" );
+ }
+ // user sets ao OFF, change retrieval amount back to default
+ // we don't remember old retrieval amout value
+ else if( iAccountSettings->iExtendedSettings->AlwaysOnlineState() != EMailAoOff &&
+ aoNewState == EMailAoOff &&
+ doFetchAllVariation )
+ {
+ if ( iAccountSettings->iIsImap4 )
+ {
+ iAccountSettings->iImap4Settings->SetInboxSynchronisationLimit(
+ KImumMboxDefaultInboxUpdateLimit );
+ }
+ else
+ {
+ iAccountSettings->iPop3Settings->SetInboxSynchronisationLimit(
+ KImumMboxDefaultInboxUpdateLimit );
+ }
+ IMUM0( 0, "SetInboxSynchronisationLimit = KImumMboxDefaultInboxUpdateLimit" );
+ }
+
+ // Automatic Retrieval
+ iAccountSettings->iExtendedSettings->SetAlwaysOnlineState( aoNewState );
+
+ // Retrieval Days
+ iAccountSettings->iExtendedSettings->SetSelectedWeekDays(
+ StoreGetNextValue( ToUid( EIMASAODays ) ) );
+
+ // Retrieval hours
+ StoreAoHoursL();
+
+ // Retrieval interval
+ StoreAoInterval();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsIapL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsIapL( const TBool aIsIncoming )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsIapL, 0, KLogUi );
+
+ // Fetch next item
+ TUid id = ToUid( aIsIncoming ? EIMASIncomingIap : EIMASOutgoingIap );
+ CMuiuSettingBase* base = NextItemSearch( id );
+ CIMSSettingsAccessPointItem* iapItem =
+ static_cast<CIMSSettingsAccessPointItem*>( base );
+
+ // Change the state depending on the protocol
+ // The item validator sets the states for the item itself, while storing
+ // needs only to copy the value into the settings
+ if ( aIsIncoming )
+ {
+ // Incoming settings
+ if( iapItem->iIap.iResult == CMManager::EAlwaysAsk )
+ {
+ // Set to Default connection, always ask is handled that way
+ iAccountSettings->iIncomingIap = 0;
+ }
+ else
+ {
+ iAccountSettings->iIncomingIap = iapItem->iIap.iId;
+ }
+
+ if ( iAccountSettings->iIsImap4 )
+ {
+ iAccountSettings->iImap4Settings->SetFetchSizeL(
+ iMailboxApi.CommDbUtilsL().DetermineImap4BufferSize(
+ iAccountSettings->iIncomingIap, *iDefaultData ) );
+ }
+ }
+ else
+ {
+ // Outgoing settings
+ if( iapItem->iIap.iResult == CMManager::EAlwaysAsk )
+ {
+ // Set to Default connection, always ask is handled that way
+ iAccountSettings->iOutgoingIap = 0;
+ }
+ else
+ {
+ iAccountSettings->iOutgoingIap = iapItem->iIap.iId;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsSecurityL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsSecurityL( const TBool aIsIncoming )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsSecurityL, 0, KLogUi );
+
+ // Make a protocol check
+ if ( aIsIncoming )
+ {
+ TIMASMailSecurity security =
+ static_cast<TIMASMailSecurity>( StoreGetNextValue(
+ ToUid( EIMASIncomingSecurity ) ) );
+
+
+ if ( iAccountSettings->iIsImap4 )
+ {
+ // Imap4 settings
+ MsvEmailMtmUiUtils::StoreSecuritySettings(
+ *iAccountSettings->iImap4Settings, security );
+ }
+ else
+ {
+ // Pop3 settings
+ MsvEmailMtmUiUtils::StoreSecuritySettings(
+ *iAccountSettings->iPop3Settings, security );
+ }
+
+ }
+ else
+ {
+ TIMASMailSecurity security =
+ static_cast<TIMASMailSecurity>( StoreGetNextValue(
+ ToUid( EIMASOutgoingSecurity ) ) );
+ // Smtp settings
+ MsvEmailMtmUiUtils::StoreSecuritySettings(
+ *iAccountSettings->iSmtpSettings, security );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSettingsRetrievedPartsImap4L()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSettingsRetrievedPartsImap4L(
+ const TImap4GetMailOptions aOptions,
+ const TImImap4PartialMailOptions aPartial )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSettingsRetrievedPartsImap4L, 0, KLogUi );
+
+ // Set mail fetching options
+ iAccountSettings->iImap4Settings->SetGetMailOptions( aOptions );
+
+ // Set partial options
+ iAccountSettings->iImap4Settings->SetPartialMailOptionsL( aPartial );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreRetrievedValuesImap4L()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreRetrievedValuesImap4L( const TInt32 aSize )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreRetrievedValuesImap4L, 0, KLogUi );
+
+ iAccountSettings->iImap4Settings->SetBodyTextSizeLimitL( aSize );
+ iAccountSettings->iImap4Settings->SetAttachmentSizeLimitL( aSize );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreRetrievedPartsL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreRetrievedPartsL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreRetrievedPartsL, 0, KLogUi );
+
+ // Get the selected button
+ CMuiuSettingBase* base =
+ NextItemSearch( ToUid( EIMASDownloadRetrievedParts ) );
+ CMuiuSettingsLinkExtended* radioArray =
+ static_cast<CMuiuSettingsLinkExtended*>( base );
+
+ TUid id = ToUid( 0 );
+ TInt index = 0;
+ FindCheckedRadiobutton( *radioArray, id, index );
+
+ // Individual handling for imap4 and pop3 protocols
+ if ( iAccountSettings->iIsImap4 )
+ {
+ // Only headers are fetched during the sync
+ StoreSettingsRetrievedPartsImap4L( EGetImap4EmailHeaders );
+ StoreRetrievedValuesImap4L();
+ }
+ else
+ {
+ switch ( id.iUid )
+ {
+ case EIMASBtnRetrieveBodyAtt:
+ iAccountSettings->iPop3Settings->SetPopulationLimitL(
+ EIMASMapFullBody );
+ break;
+
+ case EIMASBtnRetrieveHeader:
+ iAccountSettings->iPop3Settings->SetPopulationLimitL(
+ EIMASMapHeadersOnly );
+ break;
+
+ case EIMASBtnRetrieveLimit:
+ {
+ // Get the value from item
+ base = SettingFindEditor( *base, id );
+ iAccountSettings->iPop3Settings->SetPopulationLimitL(
+ base->Value() );
+ }
+ break;
+
+ default:
+ __ASSERT_DEBUG( EFalse, User::Panic(
+ KIMSSettingsDialogPanic, KErrUnknown ) );
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreFolderPathL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreFolderPathL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreFolderPathL, 0, KLogUi );
+
+ // Only possible with Imap4
+ if ( iAccountSettings->iIsImap4 )
+ {
+ // Fetch the text from the setting
+ TMuiuSettingsText buf16 =
+ *StoreGetNextText( ToUid( EIMASUserUnixPath ) );
+
+ HBufC* text = StringLoader::LoadLC(
+ R_IMUM_SETTINGS_UNIX_PATH );
+
+ // If the text matches with the default text clean the text field
+ if ( !text->CompareC( buf16 ) )
+ {
+ buf16.Zero();
+ }
+
+ CleanupStack::PopAndDestroy( text );
+ text = NULL;
+
+ TBuf8<KMuiuDynMaxSettingsTextLength> buf8;
+ buf8.Copy( buf16.Left( KMuiuDynMaxSettingsTextLength ) );
+
+ iAccountSettings->iImap4Settings->SetFolderPathL( buf8 );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreUsername()
+// ----------------------------------------------------------------------------
+//
+const TBuf8<KMuiuDynMaxSettingsTextLength> CIMSSettingsDialog::StoreUsername(
+ const TDesC& aUsername )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreUsername, 0, KLogUi );
+
+ TBuf8<KMuiuDynMaxSettingsTextLength> buffer;
+ buffer.Copy( aUsername );
+
+ return buffer;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StorePassword()
+// ----------------------------------------------------------------------------
+//
+const TBuf8<KMuiuDynMaxSettingsTextLength> CIMSSettingsDialog::StorePassword(
+ const TDesC& aPassword,
+ const TInt aFlag )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StorePassword, 0, KLogUi );
+
+ TBuf8<KMuiuDynMaxSettingsTextLength> buffer;
+ buffer.Copy( aPassword );
+
+ // Clear the flag, as it is valid now
+ TMuiuFlags flags = iAccountSettings->iExtendedSettings->StatusFlags();
+ flags.ClearFlag( aFlag );
+ iAccountSettings->iExtendedSettings->SetStatusFlags( flags );
+
+ return buffer;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSignatureL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSignatureL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSignatureL, 0, KLogUi );
+
+ iAccountSettings->iSmtpSettings->SetAddSignatureToEmail(
+ StoreGetNextValue( ToUid( EIMASUserIncludeSignature ) ) > 0 );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StorePortL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StorePortL( const TBool aIncoming )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StorePortL, 0, KLogUi );
+
+ // Fetch next item
+ TInt id = aIncoming ? EIMASIncomingPort : EIMASOutgoingPort;
+ CMuiuSettingBase* base = NextItemSearch( ToUid( id ) );
+
+ CMuiuSettingsEditValue* valueEditor =
+ static_cast<CMuiuSettingsEditValue*>(
+ SettingFindEditor( *base, ToUid( EIMASBtnPortUserDefined ) ) );
+
+ CheckPort( *base, aIncoming );
+
+ __ASSERT_DEBUG( valueEditor->Value() >= 0, User::Panic(
+ KIMSSettingsDialogPanic, KErrUnknown ) );
+
+ // Check incoming&outgoing
+ if ( aIncoming )
+ {
+ // Check imap4&pop3
+ if ( iAccountSettings->iIsImap4 )
+ {
+ iAccountSettings->iImap4Settings->SetPort(
+ valueEditor->Value() );
+ }
+ else
+ {
+ iAccountSettings->iPop3Settings->SetPort(
+ valueEditor->Value() );
+ }
+ }
+ else
+ {
+ iAccountSettings->iSmtpSettings->SetPort(
+ valueEditor->Value() );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreAoHoursL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreAoHoursL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreAoHoursL, 0, KLogUi );
+
+ // Hours are stored into two seperate settings, which needs to be combined
+ CMuiuSettingBase* aoHours =
+ NextItemSearch( ToUid( EIMASAOHours ) );
+
+ // Define default times
+ TTime thisTime = 0;
+ TTime nextTime = 0;
+ TInt radiobutton = aoHours->Value();
+
+ // When user has defined the hours, get them manually
+ if ( radiobutton )
+ {
+ CMuiuSettingsEditValue* userdef =
+ static_cast<CMuiuSettingsEditValue*>(
+ GetSubItem( *aoHours, radiobutton ) );
+ CMuiuSettingsEditValue* sub1 = NULL;
+ CMuiuSettingsEditValue* sub2 = NULL;
+ FindMultilineEditorL( ToUid( EIMASEditAoHoursEditor ), sub1, sub2 );
+ __ASSERT_DEBUG( sub1 && sub2, User::Panic(
+ KIMSSettingsDialogPanic, KErrNotFound ) );
+
+ // Take times
+ thisTime = sub1->Value();
+ nextTime = sub2->Value();
+
+ userdef = NULL;
+ sub1 = NULL;
+ sub2 = NULL;
+ }
+
+ // Store the values
+ iAccountSettings->iExtendedSettings->SetSelectedTimeStart( thisTime );
+ iAccountSettings->iExtendedSettings->SetSelectedTimeStop( nextTime );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreAoInterval()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreAoInterval()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreAoInterval, 0, KLogUi );
+
+ TInt interval = GetAoIntervalTimeInMinutes();
+ iAccountSettings->iExtendedSettings->SetInboxRefreshTime( interval );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::GetAoIntervalTimeInMinutes()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::GetAoIntervalTimeInMinutes()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::GetAoIntervalTimeInMinutes, 0, KLogUi );
+
+ TInt ret;
+
+ CMuiuSettingsLinkExtended* radioButtons =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ GetItem( TUid::Uid( EIMASAOInterval ) ) );
+
+ TUid id = ToUid( 0 );
+ TInt index = 0;
+ FindCheckedRadiobutton( *radioButtons, id, index );
+
+ // Set the correct amount of minutes to setting
+ switch ( id.iUid )
+ {
+ case EIMASBtnAo5Min:
+ ret = KIMASAoInterval5Min;
+ break;
+
+ case EIMASBtnAo15Min:
+ ret = KIMASAoInterval15Min;
+ break;
+
+ case EIMASBtnAo30Min:
+ ret = KIMASAoInterval30Min;
+ break;
+
+ case EIMASBtnAo60Min:
+ ret = KIMASAoInterval1Hour;
+ break;
+
+ default:
+ case EIMASBtnAo2Hours:
+ ret = KIMASAoInterval2Hours;
+ break;
+
+ case EIMASBtnAo4Hours:
+ ret = KIMASAoInterval4Hours;
+ break;
+
+ case EIMASBtnAo6Hours:
+ ret = KIMASAoInterval6Hours;
+ break;
+ }
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreGetNextText()
+// ----------------------------------------------------------------------------
+//
+const TMuiuSettingsText* CIMSSettingsDialog::StoreGetNextText(
+ const TUid& aItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreGetNextText, 0, KLogUi );
+
+ // Fetch next item
+ CMuiuSettingBase* base = NextItemSearch( aItemId );
+
+ return base->Text();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreGetNextValue()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::StoreGetNextValue(
+ const TUid& aItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreGetNextValue, 0, KLogUi );
+
+ // Fetch next item
+ CMuiuSettingBase* base = NextItemSearch( aItemId );
+
+ return base->Value();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreGetNextBoolean()
+// ----------------------------------------------------------------------------
+//
+TBool CIMSSettingsDialog::StoreGetNextBoolean(
+ const TUid& aItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreGetNextBoolean, 0, KLogUi );
+
+ // Fetch next item
+ CMuiuSettingBase* base = NextItemSearch( aItemId );
+
+ return base->Value() != 0;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreGetLoginInformation()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreGetLoginInformation( TDes8& aUserName,
+ TDes8& aPassword )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreGetLoginInformation, 0, KLogUi );
+ IMUM_IN();
+
+ iInitResource = R_IMAS_INCOMING_SETTINGS;
+ TRAPD( err, InitializeNewResourceL() );
+ if( err != KErrNone )
+ {
+ IMUM2( 0, "InitializeNewResourceL(res = 0x%x) leaved with code %d", R_IMAS_INCOMING_SETTINGS, err);
+ return;
+ }
+
+ aUserName.Copy( *StoreGetNextText( ToUid( EIMASIncomingUserName ) ) );
+ aPassword.Copy( *StoreGetNextText( ToUid( EIMASIncomingUserPwd ) ) );
+
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::StoreSetLoginInformation()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::StoreSetLoginInformation( const TDesC8& aUserName,
+ const TDesC8& aPassword )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::StoreSetLoginInformation, 0, KLogUi );
+ IMUM_IN();
+
+ iInitResource = R_IMAS_INCOMING_SETTINGS;
+ TRAPD( err, InitializeNewResourceL() );
+ if( err != KErrNone )
+ {
+ IMUM2( 0, "InitializeNewResourceL(res = 0x%x) leaved with code %d", R_IMAS_INCOMING_SETTINGS, err);
+ return;
+ }
+
+ TMuiuSettingsText text;
+ text.Copy( aUserName );
+ NextItemSearch( ToUid( EIMASIncomingUserName ) )->SetText( &text );
+ text.Copy( aPassword );
+ NextItemSearch( ToUid( EIMASIncomingUserPwd ) )->SetText( &text );
+
+ IMUM_OUT();
+ }
+
+/******************************************************************************
+
+ Brand new itemcheck code
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventHandleApproverEvent()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::EventHandleApproverEvent(
+ const TIMSApproverEvent aEvent )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventHandleApproverEvent, 0, KLogUi );
+
+ switch ( aEvent )
+ {
+ case EIMSApproverRemoveOmaEmn:
+ EventEMNForceTurnOff();
+ break;
+
+ // Always online has to be removed
+ case EIMSApproverRemoveAlwaysOnline:
+ EventAOForceTurnOff();
+ break;
+
+ default:
+ break;
+ }
+ }
+
+/******************************************************************************
+
+ Aquire custom pages
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::AcquireCustomSettingPageL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::AcquireCustomSettingPageL(
+ CAknSettingPage*& aReturnPage,
+ TMuiuDynSetUpdateMode& aReturnUpdateMode,
+ TInt& aReturnSettingValue,
+ TMuiuSettingsText& /* aReturnSettingText */,
+ CDesCArrayFlat& aReturnRadioButtonArray,
+ CMuiuSettingBase& aParamBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::AcquireCustomSettingPageL, 0, KLogUi );
+
+ switch ( aParamBaseItem.iItemId.iUid )
+ {
+ // Handle encoding
+ case EIMASUserEncoding:
+ aReturnPage = AcquireCustomEncodingPageL(
+ aReturnUpdateMode, aReturnSettingValue,
+ aReturnRadioButtonArray, aParamBaseItem );
+ break;
+
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::AcquireCustomEncodingPageL()
+// ----------------------------------------------------------------------------
+//
+CAknSettingPage* CIMSSettingsDialog::AcquireCustomEncodingPageL(
+ TMuiuDynSetUpdateMode& aReturnUpdateMode,
+ TInt& aReturnSettingValue,
+ CDesCArrayFlat& aReturnRadioButtonArray,
+ CMuiuSettingBase& aParamBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::AcquireCustomEncodingPageL, 0, KLogUi );
+
+ // Create radiobutton array of all existing character converters
+ AcquireCustomEncodingButtonArrayL( aReturnRadioButtonArray );
+
+ // Create the radiobutton page
+ CAknRadioButtonSettingPage* encodingPage =
+ new ( ELeave ) CAknRadioButtonSettingPage(
+ SettingPageResource( EIPRRadioButton ),
+ aReturnSettingValue, &aReturnRadioButtonArray );
+ CleanupStack::PushL( encodingPage );
+
+ // Define the page properties
+ encodingPage->SetSettingTextL( *aParamBaseItem.iItemLabel );
+
+ // Set updatemode to accept setting only when the setting is
+ // accepted
+ aReturnUpdateMode = CAknSettingPage::EUpdateWhenAccepted;
+
+ // Pop and return
+ CleanupStack::Pop( encodingPage );
+ return encodingPage;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::AcquireCustomEncodingButtonArrayL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::AcquireCustomEncodingButtonArrayL(
+ CDesCArrayFlat& aButtons )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::AcquireCustomEncodingButtonArrayL, 0, KLogUi );
+
+ RFs& fs = CCoeEnv::Static()->FsSession();
+
+ // Create character converter object and the array of available converters
+ CCnvCharacterSetConverter* charConv = CCnvCharacterSetConverter::NewLC();
+ CIMACharConvList* converters =
+ CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC( fs );
+ const TInt count = converters->Count();
+
+ // Append items to array
+ for ( TInt converter = 0; converter < count; converter++ )
+ {
+ HBufC8* encoderName =
+ charConv->ConvertCharacterSetIdentifierToStandardNameL(
+ ( *converters )[converter].Identifier(), fs );
+
+ if ( encoderName )
+ {
+ CleanupStack::PushL( encoderName );
+
+ TMuiuSettingsText temp;
+ temp.Copy( *encoderName );
+ aButtons.AppendL( temp );
+
+ CleanupStack::PopAndDestroy( encoderName );
+ encoderName = NULL;
+ }
+ }
+
+ // Remove the objects
+ CleanupStack::PopAndDestroy( converters );
+ converters = NULL;
+ CleanupStack::PopAndDestroy( charConv );
+ charConv = NULL;
+ }
+
+/******************************************************************************
+
+ Misc functions
+
+******************************************************************************/
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::NextItemSearch()
+// ----------------------------------------------------------------------------
+//
+CMuiuSettingBase* CIMSSettingsDialog::NextItemSearch(
+ const TUid& aExpectedId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::NextItemSearch, 0, KLogUi );
+
+ // Try with cumulative search. It's highly likely that the next item
+ // will be the item that is needed
+ TInt count = iInitArray->Count();
+ TInt previousIndex = iInitCurrentIndex;
+
+ // First start the searching from the previous index
+ CMuiuSettingBase* base = NextItemDoSearch( count, aExpectedId );
+
+ if ( !base )
+ {
+ // Set the current index to 0 and continue from the beginning to
+ // where the previous search started
+ iInitCurrentIndex = KErrNotFound;
+ base = NextItemDoSearch( ++previousIndex, aExpectedId );
+
+ // Item can't be found at all, no means to continue, panic
+ __ASSERT_DEBUG( base != NULL,
+ User::Panic( KIMSSettingsDialogPanic, KErrNotFound ) );
+ }
+
+ return base;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::NextItemDoSearch()
+// ----------------------------------------------------------------------------
+//
+CMuiuSettingBase* CIMSSettingsDialog::NextItemDoSearch(
+ const TInt aLastItem,
+ const TUid& aExpectedId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::NextItemDoSearch, 0, KLogUi );
+
+ CMuiuSettingBase* base = NULL;
+
+ // Continue search until the item is found
+ while ( !base && ++iInitCurrentIndex < aLastItem )
+ {
+ base = iInitArray->At( iInitCurrentIndex ).iItem;
+ base = ( base->iItemId == aExpectedId ) ? base : NULL;
+ }
+
+ return base;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::SetInitializeFlags()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::SetInitializeFlags(
+ const TInt aError )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::SetInitializeFlags, 0, KLogUi );
+
+ SetFlags( aError, iInitSetFlag );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::SetFlags()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::SetFlags(
+ const TInt aError,
+ const TInt aFlag )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::SetFlags, 0, KLogUi );
+
+ ChangeFlag( aFlag, ( aError != KErrNone || Flag( aFlag ) ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::SetStoreFlags()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::SetStoreFlags(
+ const TBool aState,
+ const TInt aFlag )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::SetStoreFlags, 0, KLogUi );
+
+ ChangeFlag( aFlag, ( aState || Flag( aFlag ) ) );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::SetEmailSettingsState()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::SetEmailSettingsState()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::SetEmailSettingsState, 0, KLogUi );
+
+ TBool save = EFalse;
+
+ // Check if any item in the array has changed
+ for ( TInt flag = EDialogMainMenu;
+ --flag >= EDialogIncomingChanged && !save; )
+ {
+ // Check if any setting has changed
+ save = Flag( flag );
+ }
+
+ // Set the save status
+ ChangeFlag( EImumSettingSave, save );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::GetStorerFlag()
+// ----------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::GetStorerFlag(
+ const CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::GetStorerFlag, 0, KLogUi );
+
+ switch ( aBaseItem.iItemResourceId )
+ {
+ case R_IMAS_INCOMING_SETTINGS:
+ return EDialogIncomingChanged;
+
+ case R_IMAS_OUTGOING_SETTINGS:
+ return EDialogOutgoingChanged;
+
+ case R_IMAS_USER_PREFERENCES:
+ return EDialogUserPrefChanged;
+
+ case R_IMAS_RETRIEVAL_LIMIT:
+ return EDialogRetLimitChanged;
+
+ case R_IMAS_DOWNLOAD_SETTINGS:
+ return EDialogDownloadChanged;
+
+ case R_IMAS_ALWAYSONLINE_SETTINGS:
+ return EDialogAlOnlineChanged;
+
+ default:
+ break;
+ }
+
+ return KErrNotFound;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::SubscribeFoldersL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::SubscribeFoldersL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::SubscribeFoldersL, 0, KLogUi );
+
+ TMsvId service;
+ TMsvEntry tEntry;
+ User::LeaveIfError( iMailboxApi.MsvSession().GetEntry(
+ iAccountSettings->iMailboxId, service, tEntry ) );
+
+
+ // Flag whether username/password may have changed
+ TBool logingInfoChanged = EFalse;
+ TBuf8<KImasLoginLength> userName;
+ TBuf8<KImasPasswordLength> password;
+
+ if ( Flag( EDialogIncomingChanged ) )
+ {
+ // Username/password may have changed. They need to be pushed back
+ // into settings database by CImapSubscriptionDialog if it tries to
+ // log into email server to refresh folder list.
+ logingInfoChanged = ETrue;
+ StoreGetLoginInformation( userName, password );
+ }
+
+ // Run the dialog
+ CImapSubscriptionDialog* subDlg =
+ CImapSubscriptionDialog::NewL(
+ iBaseUiFlags, tEntry.iRelatedId, CurrentMailboxId(),
+ logingInfoChanged, userName, password, iMailboxApi );
+
+ subDlg->PrepareLC( R_IMUM_FOLDER_SUBSRCIPTION_DIALOG );
+ subDlg->RunLD();
+
+ // We need to delay the CIMSSettingsDialog exit so that dialogs beneath it
+ // has time to close properly
+ if ( !iIdle->IsActive() )
+ {
+ iIdle->Start( TCallBack( &CIMSSettingsDialog::DelayedExecFlags, this));
+ }
+
+ // If username/password are not defined or are wrong and subscription
+ // dialog logged into IMAP server, login dialog is presented to user
+ // and login info may have changed .
+ // Note: logingInfoChanged is in/out parameter to subscription dialog.
+ // On return it is true if the dialog logged into IMAP server.
+ if ( logingInfoChanged )
+ {
+ TBool isPasswordTemporary;
+ GetLoginInformationL( userName, password, isPasswordTemporary );
+ if ( isPasswordTemporary )
+ {
+ password.Zero();
+ }
+ if ( Flag( EDialogIncomingChanged ) )
+ {
+ // Store into changed values
+ StoreSetLoginInformation( userName, password );
+ }
+ else
+ {
+ // Update login info into our copy of settings
+ iAccountSettings->iImap4Settings->SetLoginNameL( userName );
+ iAccountSettings->iImap4Settings->SetPasswordL( password );
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::CheckSubscribedFolderStateL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::CheckSubscribedFolderStateL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::CheckSubscribedFolderStateL, 0, KLogUi );
+
+ TMsvId mailboxId = ( iAccountSettings->iIsImap4 ) ?
+ iAccountSettings->iImap4AccountId.iImapService :
+ iAccountSettings->iPop3AccountId.iPopService;
+ TBool hasFolders =
+ iMailboxApi.MailboxUtilitiesL().HasSubscribedFoldersL( mailboxId );
+ SetHideItem( !hasFolders, ToUid( EIMASLimitFolders ), ETrue );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::LaunchIapPageL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::LaunchIapPageL(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::LaunchIapPageL, 0, KLogUi );
+
+ CIMSSettingsAccessPointItem* iapItem =
+ static_cast<CIMSSettingsAccessPointItem*>( &aBaseItem );
+
+ TInt result = iMailboxApi.CommDbUtilsL().LaunchIapPageL( *iapItem );
+
+ // Finalize the accesspoint item, after the setting is successfully set
+ switch ( result )
+ {
+ case KErrNone:
+ SetItemIapItemL( *iapItem );
+ break;
+ // Quit immediately
+ case KErrAbort:
+ SetFlag( EImumSettingShouldExit );
+ break;
+ case KErrCancel:
+ default:
+ break;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::FindMultilineEditorL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::FindMultilineEditorL(
+ const TUid& aId,
+ CMuiuSettingsEditValue*& aTopEditor,
+ CMuiuSettingsEditValue*& aBottomEditor )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::FindMultilineEditorL, 0, KLogUi );
+
+ CMuiuSettingBase* baseItem = GetItem( aId );
+
+ if ( baseItem )
+ {
+ CMuiuSettingsEditValue* top =
+ static_cast<CMuiuSettingsEditValue*>( GetSubItem( *baseItem, 0 ) );
+ aTopEditor = top;
+ CMuiuSettingsEditValue* bottom =
+ static_cast<CMuiuSettingsEditValue*>( GetSubItem( *baseItem, 1 ) );
+ aBottomEditor = bottom;
+ top = NULL;
+ bottom = NULL;
+ }
+
+ User::LeaveIfNull( baseItem );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::SettingLaunchMultilineEditorL()
+// ----------------------------------------------------------------------------
+//
+TMuiuPageEventResult CIMSSettingsDialog::SettingLaunchMultilineEditorL(
+ CMuiuSettingBase& /* aBaseItem */,
+ TMuiuDynSetUpdateMode& /* aUpdateMode */ )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::SettingLaunchMultilineEditorL, 0, KLogUi );
+
+ // Launches Always Online multiline editor, although this function
+ // is meant to be generic function.
+
+ CMuiuSettingsEditValue* sub1 = NULL;
+ CMuiuSettingsEditValue* sub2 = NULL;
+ FindMultilineEditorL( ToUid( EIMASEditAoHoursEditor ), sub1, sub2 );
+ __ASSERT_DEBUG( sub1 && sub2, User::Panic(
+ KIMSSettingsDialogPanic, KErrNotFound ) );
+
+ // Take times
+ TTime thisTime = sub1->Value();
+ TTime nextTime = sub2->Value();
+
+
+ CAknMultiLineDataQueryDialog* multiLineDlg =
+ CAknMultiLineDataQueryDialog::NewL( thisTime, nextTime );
+
+ CAknLocalScreenClearer* localScreenClearer = CAknLocalScreenClearer::NewLC( EFalse );
+
+
+ // Execute the dialog
+ if ( multiLineDlg->ExecuteLD( R_IMAS_SETTINGS_DIALOG_HOURS_QUERY ) )
+ {
+ CleanupStack::PopAndDestroy(localScreenClearer);
+
+ // Save the values
+ sub1->SetValue( thisTime.Int64() );
+ sub2->SetValue( nextTime.Int64() );
+
+ // Update the setting text
+ CMuiuSettingsLinkExtended* linkItem =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ GetItem( ToUid( EIMASAOHours ) ) );
+
+ // Check if the times are the same, which means the system should be
+ // on for next 24 hours
+ if ( thisTime == nextTime )
+ {
+ UpdateItemDefaultSettingTextL( *linkItem );
+ }
+ else
+ {
+ UpdateItemCustomSettingTextL( *linkItem, *sub1, *sub2 );
+ }
+
+ linkItem = NULL;
+ sub1 = NULL;
+ sub2 = NULL;
+
+ return EMuiuPageEventResultApproved;
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(localScreenClearer);
+
+ sub1 = NULL;
+ sub2 = NULL;
+
+ return EMuiuPageEventResultCancel;
+ }
+ }
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::UpdateItemDefaultSettingTextL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::UpdateItemDefaultSettingTextL(
+ CMuiuSettingsLinkExtended& aLinkItem ) const
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::UpdateItemDefaultSettingTextL, 0, KLogUi );
+
+ HBufC* format = StringLoader::LoadLC(
+ R_IMAS_SETTINGS_DIALOG_ALWAYS_ALLHOURS );
+
+ aLinkItem.iItemSettingText->Copy( *format );
+ aLinkItem.SetValue( 0 );
+
+ CleanupStack::PopAndDestroy( format );
+ format = NULL;
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::UpdateItemCustomSettingTextL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::UpdateItemCustomSettingTextL(
+ CMuiuSettingsLinkExtended& aLinkItem,
+ CMuiuSettingsEditValue& aItemFrom,
+ CMuiuSettingsEditValue& aItemTo ) const
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::UpdateItemCustomSettingTextL, 0, KLogUi );
+
+ // Define variables for time
+ TTime thisTime = aItemFrom.Value();
+ TTime nextTime = aItemTo.Value();
+
+ HBufC* format = StringLoader::LoadLC(
+ R_QTN_TIME_USUAL_WITH_ZERO );
+
+ // Copy the time to text
+ RBuf timeText1;
+ RBuf timeText2;
+ timeText1.CreateMaxL( KMuiuDynMaxSettingsLongTextLength );
+ timeText2.CreateMaxL( KMuiuDynMaxSettingsLongTextLength );
+
+ thisTime.FormatL( timeText1, *format );
+ nextTime.FormatL( timeText2, *format );
+ CleanupStack::PopAndDestroy( format );
+ format = NULL;
+
+ RBuf tempText1;
+ RBuf tempText2;
+ tempText1.CreateMaxL( KMuiuDynMaxSettingsLongTextLength );
+ tempText2.CreateMaxL( KMuiuDynMaxSettingsLongTextLength );
+
+ // Load the template
+ StringLoader::Load(
+ tempText1, R_IMAS_SETTINGS_DIALOG_BETWEEN_FORMAT );
+
+ // Fetch the times
+ StringLoader::Format( tempText2, tempText1, 0, timeText1 );
+ StringLoader::Format( tempText1, tempText2, 1, timeText2 );
+
+ AknTextUtils::LanguageSpecificNumberConversion( tempText1 );
+
+ // Finally copy the text to item
+ aLinkItem.iItemSettingText->Copy( tempText1 );
+ aLinkItem.SetValue( 1 );
+
+ timeText1.Close();
+ timeText2.Close();
+ tempText1.Close();
+ tempText2.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::UpdateItemText()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::UpdateItemText(
+ const TUid& aItemId )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::UpdateItemText, 0, KLogUi );
+
+ CMuiuSettingsLinkExtended* radioEditor =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ GetItem( aItemId ) );
+
+ CMuiuSettingsEditValue* editor =
+ static_cast<CMuiuSettingsEditValue*>(
+ SettingFindEditor( *radioEditor, radioEditor->Value(), EFalse ) );
+
+ if ( editor )
+ {
+ SetItemText( *radioEditor, *editor->iItemSettingText );
+ }
+ else
+ {
+ CMuiuSettingBase* base = GetSubItem( *radioEditor,
+ radioEditor->Value() );
+
+ if ( base )
+ {
+ SetItemText( *radioEditor, *base->iItemLabel );
+ }
+ base = NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::UpdateFetchLimitSetting()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::UpdateFetchLimitSetting()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::UpdateFetchLimitSetting, 0, KLogUi );
+
+ TUid inboxId = ToUid( EIMASLimitInbox );
+ TUid folderId = ToUid( EIMASLimitFolders );
+
+ // Always Online is turned on
+ if ( Flag( EDialogAlwaysOnlineOn ) )
+ {
+ SetReadOnly( inboxId, ETrue );
+ SetReadOnly( folderId, ETrue );
+
+ TMuiuSettingsText fetchAllText;
+ StringLoader::Load(
+ fetchAllText, R_IMAS_SETTINGS_DIALOG_FETCH_HEADERS_ALL );
+ SetItemText( *GetItem( inboxId ), fetchAllText );
+ SetItemText( *GetItem( folderId ), fetchAllText );
+ }
+ else
+ {
+ SetReadOnly( inboxId, EFalse );
+ SetReadOnly( folderId, EFalse );
+
+ // Update the setting text for the items
+ UpdateItemText( ToUid( EIMASLimitInbox ) );
+ UpdateItemText( ToUid( EIMASLimitFolders ) );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventUpdateAlwaysOnline()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::EventUpdateAlwaysOnline(
+ const TInt aNewState )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventUpdateAlwaysOnline, 0, KLogUi );
+
+ // Turn always online off?
+ if ( aNewState == EMailAoOff )
+ {
+ ClearFlag( EDialogAlwaysOnlineOn );
+ }
+ // Turn it on instead
+ else
+ {
+ // show warning about increasing costs if always online switched on.
+ // Warning on / warning off is variated by operators so we have
+ // to check feature from central repository
+ TBool doNotShowNote = EFalse;
+ TRAP_IGNORE( doNotShowNote = MsvEmailMtmUiFeatureUtils::LocalFeatureL(
+ KCRUidMuiuVariation, KMuiuEmailConfigFlags,
+ KEmailFeatureIdSuppressBillingNote ) );
+ // if LocalFeatureL should leave, doNotShowNote == EFalse
+
+ if ( !doNotShowNote && !Flag( EDialogAlwaysOnlineOn ) )
+ {
+ TRAP_IGNORE( CIMSSettingsNoteUi::ShowNoteL(
+ R_MCE_SETTINGS_MAIL_ENABLING_COST,
+ EIMSInformationNote, ETrue ) );
+ }
+
+ SetFlag( EDialogAlwaysOnlineOn );
+ }
+
+ InitializeAlwaysOnlineState();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventUpdateMailNotifications()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::EventUpdateMailNotifications(
+ const TInt aNewState )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventUpdateMailNotifications, 0, KLogUi );
+
+ ChangeFlag( EDialogOmaEmnOn, aNewState != EMailEmnOff );
+
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventAOForceTurnOff()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::EventAOForceTurnOff()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventAOForceTurnOff, 0, KLogUi );
+
+ CMuiuSettingsLinkExtended* alwaysOnline =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ GetUninitializedItem( TUid::Uid( EIMASAORolling ) ) );
+
+ // In case we exit Settings view new state must be store
+ SetFlag( EDialogAlOnlineChanged );
+
+ InitAnyItem( *alwaysOnline, EMailAoOff, NULL );
+ ClearFlag( EDialogAlwaysOnlineOn );
+ InitializeAlwaysOnlineState();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventEMNForceTurnOff()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::EventEMNForceTurnOff()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventEMNForceTurnOff, 0, KLogUi );
+
+ CMuiuSettingsLinkExtended* emn =
+ static_cast<CMuiuSettingsLinkExtended*>(
+ GetItem( TUid::Uid( EIMASMailNotifications ) ) );
+
+ InitAnyItem( *emn, EMailEmnOff, NULL );
+ ClearFlag( EDialogOmaEmnOn );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::EventUpdateAoDays()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::EventUpdateAoDays(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::EventUpdateAoDays, 0, KLogUi );
+ IMUM_IN();
+
+ TInt resource = 0;
+
+ if ( aBaseItem.Value() == KIMASEveryDayMask )
+ {
+ resource = R_IMAS_SETTINGS_DIALOG_DAY_LIST_ALL;
+ }
+ else
+ {
+ resource = R_IMAS_SETTINGS_DIALOG_DAY_LIST_USERDEFINED;
+ }
+
+ RBuf text;
+ TRAP_IGNORE( text.Assign( StringLoader::LoadL( resource ) ) );
+ SetItemText( ToUid( EIMASAODays), text, ETrue );
+ text.Close();
+
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::HideItemsPermanently()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::HideItemsPermanently()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::HideItemsPermanently, 0, KLogUi );
+
+ // The HidePermanently functions contain build in refresh
+ // system, so prevent refreshing to limit needless function
+ // calls from the listbox
+ TBool isImap = iAccountSettings->iIsImap4;
+ iArrayFlags.ClearFlag( EMuiuDynArrayAllowRefresh );
+
+ // In case Always Online is not supported,
+ // hide the menuitem from the array
+ HidePermanently(
+ ToUid( EIMASMainAlwaysOnline ),
+ !iBaseUiFlags.GF( EMailFeatureAlwaysOnlineEmail ) );
+
+ HidePermanently(
+ ToUid( EIMASMailNotifications ),
+ !iBaseUiFlags.GF( EMailFeatureOmaEmn ) );
+
+ // POP3 Protocol
+
+ // Download Control: Unix path
+ HidePermanently( ToUid( EIMASUserUnixPath ), !isImap );
+
+ // Download Control: Retrieval Limit: Suscribed Folders
+ HidePermanently( ToUid( EIMASLimitFolders ), !isImap );
+
+ // Download Control: Folder subscription
+ HidePermanently( ToUid( EIMASUserFolderSubscription ), !isImap );
+
+ // Download Control: Retrieved parts: Total mailbody radio button
+ HidePermanently( ToUid( EIMASBtnRetrieveBody ), ETrue );
+
+ // IMAP4 Protocol
+
+ // Download Control: Retrieved parts
+ HidePermanently( ToUid( EIMASBtnRetrieveLimit ), isImap );
+ HidePermanently( ToUid( EIMASBtnRetrieveBodyAtt ), isImap );
+
+ // Incoming Settings: APOP
+ iArrayFlags.SetFlag( EMuiuDynArrayAllowRefresh );
+ HidePermanently( ToUid( EIMASIncomingAPop ), isImap );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::CheckPort()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::CheckPort(
+ CMuiuSettingBase& aBaseItemPort,
+ const TBool aIncoming )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::CheckPort, 0, KLogUi );
+
+ // Check whether port is user defined or not. If user define, do nothing
+ // otherwise set default port based on security setting.
+ TInt id = aIncoming ? EIMASIncomingSecurity : EIMASOutgoingSecurity;
+ CMuiuSettingBase* base = GetItem( ToUid( id ) );
+
+ // Get value of security setting.
+ TIMASMailSecurity security =
+ static_cast<TIMASMailSecurity>( base->Value() );
+
+ // Check whether port setting is default or user defined
+ if ( !aBaseItemPort.Value() ) // Default
+ {
+ TUint32 defaultPort( MsvEmailMtmUiUtils::GetDefaultSecurityPort(
+ security, aIncoming, iAccountSettings->iIsImap4 ) );
+
+ CMuiuSettingsEditValue* portValueEditor =
+ static_cast<CMuiuSettingsEditValue*>(
+ SettingFindEditor(
+ aBaseItemPort,
+ ToUid( EIMASBtnPortUserDefined ) ) );
+
+ InitAnyItem( *portValueEditor, defaultPort, NULL );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::ClosePortDialog()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::ClosePortDialog(
+ CMuiuSettingBase& aBaseItem )
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::ClosePortDialog, 0, KLogUi );
+
+ CheckPort( aBaseItem, aBaseItem.iItemId.iUid == EIMASIncomingPort );
+ UpdateItemText( aBaseItem.iItemId );
+
+ // Set setting dialog resource back to normal
+ SetSettingPageResource(
+ EIPRNumber,
+ R_MUIU_SETTINGS_DIALOG_NUMBER );
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::UpdateCSDFlagL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::UpdateCSDFlagL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::UpdateCSDFlagL, 0, KLogUi );
+
+ CIMSSettingsAccessPointItem* iapItem = NULL;
+ TInt error = FindItem( iapItem, TUid::Uid( EIMASIncomingIap ) );
+ if ( ( error == KErrNone ) && ( iapItem->iIap.iResult == CMManager::EDestination ) )
+ {
+ iMailboxApi.CommDbUtilsL().IsApBearerCircuitSwitchedL( iapItem->iIap.iId ) ?
+ SetFlag( EDialogCsdAccessPoint ) :
+ ClearFlag( EDialogCsdAccessPoint );
+ }
+ else
+ {
+ ClearFlag( EDialogCsdAccessPoint );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::UpdateAOIntervalsL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::UpdateAOIntervalsL()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::UpdateAOIntervalsL, 0, KLogUi );
+ UpdateCSDFlagL();
+ CMuiuSettingBase* aoIntervals = GetItem( ToUid( EIMASAOInterval ) );
+ if ( aoIntervals )
+ {
+ HBufC* text = NULL;
+ TMuiuSettingsText* muiuText = new (ELeave) TMuiuSettingsText;
+ TInt valueInMinutes = GetAoIntervalTimeInMinutes();
+
+ // After InitializeAoIntervalEditor function call, valueInMinutes
+ // contains the index of the radio button in UI.
+ InitializeAoIntervalEditor( valueInMinutes, text );
+
+ muiuText->Copy( *text );
+ InitAnyItem( *aoIntervals, valueInMinutes, muiuText );
+ delete muiuText;
+ delete text;
+ text = NULL;
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsDialog::GetHelpContext()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::GetHelpContext, 0, KLogUi );
+
+ CMuiuSettingBase* baseItem = CurrentItem();
+
+ switch ( baseItem->iItemResourceId )
+ {
+ case R_IMAS_MAIN_MENU:
+ aContext.iContext = KMCE_HLP_SETT_EMAILMAIN;
+ break;
+
+ case R_IMAS_INCOMING_SETTINGS:
+ aContext.iContext = KMBXS_HLP_SETT_MBX_IN;
+ break;
+
+ case R_IMAS_OUTGOING_SETTINGS:
+ aContext.iContext = KMBXS_HLP_SETT_MBX_OUT;
+ break;
+
+ case R_IMAS_USER_PREFERENCES:
+ aContext.iContext = KMCE_HLP_SETT_MAIL_USER;
+ break;
+
+ case R_IMAS_RETRIEVAL_LIMIT:
+ aContext.iContext = KMBXS_HLP_SETT_DOWNL_RETR;
+ break;
+
+ case R_IMAS_DOWNLOAD_SETTINGS:
+ aContext.iContext = KMBXS_HLP_SETT_DOWNL_CTRL;
+ break;
+
+ case R_IMAS_ALWAYSONLINE_SETTINGS:
+ aContext.iContext = KMCE_HLP_SETT_MAIL_ONLI;
+ break;
+
+ case R_IMAS_MAILBOX_MENU:
+ aContext.iContext = KMBXS_HLP_SETT_MBX_IN_OUT;
+ break;
+
+ default:
+ break;
+ }
+
+ aContext.iMajor = KImumUid;
+ }
+
+// ---------------------------------------------------------------------------
+// CIMSSettingsDialog::CurrentMailboxId()
+// ---------------------------------------------------------------------------
+//
+TMsvId CIMSSettingsDialog::CurrentMailboxId()
+ {
+ IMUM_CONTEXT( CIMSSettingsDialog::CurrentMailboxId, 0, KLogUi );
+
+ return iAccountSettings->iMailboxId;
+ }
+
+// ---------------------------------------------------------------------------
+// CIMSSettingsDialog::HandleListBoxEventL()
+// ---------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::HandleListBoxEventL( CEikListBox* aListBox,
+ TListBoxEvent aEventType )
+ {
+ // CMuiuDynamicSettingsDialog::HandleListBoxEventL() is overriden
+ // in order to handle opening of settings item
+ switch ( aEventType )
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemDoubleClicked:
+ case EEventItemActioned:
+ // Tapping on focused list box item has same effect as pressing msk
+ KeyPressOKButtonL( MskCommand() );
+ break;
+ default:
+ // CMuiuDynamicSettingsDialog takes care of changing middle
+ // sotkey
+ CMuiuDynamicSettingsDialog::HandleListBoxEventL( aListBox,
+ aEventType );
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CIMSSettingsDialog::DelayedExecFlags()
+// ---------------------------------------------------------------------------
+//
+TInt CIMSSettingsDialog::DelayedExecFlags( TAny* aPtr )
+ {
+ static_cast<CIMSSettingsDialog*>(aPtr)->iDialog.ExecFlags();
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CIMSSettingsDialog::GetLoginInformationL()
+// ---------------------------------------------------------------------------
+//
+void CIMSSettingsDialog::GetLoginInformationL(
+ TDes8& aUserName,
+ TDes8& aPassword,
+ TBool& aPasswordTemporary )
+ {
+ // Retrieve the settings of the mailbox
+ const MImumInMailboxUtilities& utils = iMailboxApi.MailboxUtilitiesL();
+ TMsvId mboxId = CurrentMailboxId();
+ TMsvEntry entry = utils.GetMailboxEntryL( mboxId );
+ CImumInSettingsData* accountsettings =
+ iMailboxApi.MailboxServicesL().LoadMailboxSettingsL( mboxId );
+ CleanupStack::PushL( accountsettings );
+ // Incoming settings
+ MImumInSettingsDataCollection* connection = &accountsettings->GetInSetL( 0 );
+
+ // Read the data
+ User::LeaveIfError( connection->GetAttr(
+ TImumDaSettings::EKeyUsername, aUserName ) );
+ User::LeaveIfError( connection->GetAttr(
+ TImumDaSettings::EKeyPassword, aPassword ) );
+ User::LeaveIfError( connection->GetAttr(
+ TImumInSettings::EKeyTemporaryPassword, aPasswordTemporary ) );
+
+ // Prepare the ending
+ CleanupStack::PopAndDestroy( accountsettings );
+ }
+
+// End of File