diff -r ebe688cedc25 -r 7fdbb852d323 email/imum/Utils/Src/IMSSettingsItemApprover.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imum/Utils/Src/IMSSettingsItemApprover.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,864 @@ +/* +* 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: IMSSettingsItemApprover.cpp +* +*/ + + + +// INCLUDE FILES +#include +#include // KUidMsvServiceEntryValue +#include // MsvUiServiceUtilities +#include // StringLoader +#include +#include "MuiuDynamicSettingItemBase.h" // CMuiuSettingBase +#include "MuiuDynamicSettingItemEditValue.h" // CMuiuSettingEditValue +#include "MuiuDynamicSettingItemEditText.h" // CMuiuSettingEditText +#include "MuiuDynamicSettingItemLink.h" // CMuiuSettingLink +#include "MuiuDynamicSettingItemExtLink.h" // CMuiuSettingExtLink + +#include "IMSSettingsItemApprover.h" +#include "ImumInMailboxUtilitiesImpl.h" +#include "ImumInternalApi.h" +#include "ImumInSettingsData.h" +#include "IMSSettingsDialog.h" +#include "EmailUtils.H" +#include "IMASPageIds.hrh" +#include "EmailFeatureUtils.h" +#include "Imas.hrh" +#include "ImumUtilsLogging.h" +#include "ImumPanic.h" + + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS +// MACROS +// LOCAL CONSTANTS AND MACROS +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES +// FORWARD DECLARATIONS + +// ============================ MEMBER FUNCTIONS =============================== + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CIMSSettingsItemApprover() +// ---------------------------------------------------------------------------- +CIMSSettingsItemApprover::CIMSSettingsItemApprover( + CImumInternalApi& aMailboxApi, + CMsvCommDbUtilities& aCommsDb, + CIMSSettingsNoteUi& aNoteUi, + CIMSSettingsBaseUI& aDialog ) + : + iMailboxApi( aMailboxApi ), + iCommsDbUtils( aCommsDb ), + iNoteUi( aNoteUi ), + iDialog( aDialog ), + iTempText( NULL ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CIMSSettingsItemApprover, 0, KLogUi ); + + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::ConstructL() +// ---------------------------------------------------------------------------- +// +void CIMSSettingsItemApprover::ConstructL() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::ConstructL, 0, KLogUi ); + + iTempText = new ( ELeave ) TMuiuSettingsText(); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::~CIMSSettingsItemApprover() +// ---------------------------------------------------------------------------- +// +CIMSSettingsItemApprover::~CIMSSettingsItemApprover() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::~CIMSSettingsItemApprover, 0, KLogUi ); + + delete iTempText; + iTempText = NULL; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::NewL() +// ---------------------------------------------------------------------------- +// +CIMSSettingsItemApprover* CIMSSettingsItemApprover::NewL( + CImumInternalApi& aMailboxApi, + CMsvCommDbUtilities& aCommsDb, + CIMSSettingsNoteUi& aNoteUi, + CIMSSettingsBaseUI& aDialog ) + { + IMUM_STATIC_CONTEXT( CIMSSettingsItemApprover::NewL, 0, utils, KLogUi ); + + CIMSSettingsItemApprover* self = NewLC( + aMailboxApi, aCommsDb, aNoteUi, aDialog ); + CleanupStack::Pop( self ); + + return self; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::NewLC() +// ---------------------------------------------------------------------------- +// +CIMSSettingsItemApprover* CIMSSettingsItemApprover::NewLC( + CImumInternalApi& aMailboxApi, + CMsvCommDbUtilities& aCommsDb, + CIMSSettingsNoteUi& aNoteUi, + CIMSSettingsBaseUI& aDialog ) + { + IMUM_STATIC_CONTEXT( CIMSSettingsItemApprover::NewLC, 0, utils, KLogUi ); + + CIMSSettingsItemApprover* self = + new ( ELeave ) CIMSSettingsItemApprover( + aMailboxApi, aCommsDb, aNoteUi, aDialog ); + CleanupStack::PushL( self ); + self->ConstructL(); + + return self; + } + +/****************************************************************************** + + Common item validating + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::ValidateType() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::ValidateType( + const CMuiuSettingBase& aBaseItem, + TDes& aNewText, + TInt& aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::ValidateType, 0, KLogUi ); + IMUM_IN(); + + // Handle the item, based on the type + switch ( aBaseItem.Type() ) + { + // Text editor + case EMuiuDynSetItemEditText: + IMUM_OUT(); + return ValidateText( aBaseItem, aNewText ); + + // Number editor + case EMuiuDynSetCheckBoxArray: + case EMuiuDynSetItemEditValue: + IMUM_OUT(); + return ValidateValue( aBaseItem, aNewValue ); + + case EMuiuDynSetRadioButtonArray: + IMUM_OUT(); + return ValidateRadioButtons( aNewValue ); + + // Type is not recognized or not supported + default: + break; + } + + IMUM_OUT(); + return EIMSNoError; + } + +/****************************************************************************** + + Special item validating + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateAccountName() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateAccountName( + const CMuiuSettingBase& aBaseItem, + TDes& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateAccountName, 0, KLogUi ); + + // First make basic test + TIMSErrors result = ValidateText( aBaseItem, aNewText ); + + // Setting has been written, try to check + if ( result == EIMSNoError ) + { + // Do not allow leaving, as it might interrupt initialization phase + TRAPD( error, + MsvEmailMtmUiUtils::CheckAccountNameL( + iMailboxApi, + aNewText, + iDialog.CurrentMailboxId(), + aBaseItem.iItemFlags.Flag( EIMSApproverGenerate ) ) ); + result = ( error == KErrNone ) ? EIMSNoError : EIMSMailboxNameExists; + } + else + { + result = EIMSMailboxNameEmpty; + } + + return result; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateServerAddress() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateServerAddress( + const CMuiuSettingBase& aBaseItem, + const TDesC& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateServerAddress, 0, KLogUi ); + + TIMSErrors result = ValidateText( aBaseItem, aNewText ); + + // Check that dot isn't in start of the server address + if ( result == EIMSNoError ) + { + TBool ok = EFalse; + TRAPD( error, ok = MsvUiServiceUtilities::IsValidDomainL( aNewText ) ); + + result = ( error == KErrNone ) && ok ? EIMSNoError : EIMSItemInvalid; + } + + return result; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateEmailAddress() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateEmailAddress( + const CMuiuSettingBase& aBaseItem, + const TDesC& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateEmailAddress, 0, KLogUi ); + + // First make basic test + TIMSErrors result = ValidateText( aBaseItem, aNewText ); + + // If text check was successful and the address is given, validate the + // email address + if ( result == EIMSNoError && aNewText.Length() ) + { + // Trap any errors to prevent leaving + TBool ok = EFalse; + TRAPD( error, ok = + MsvUiServiceUtilities::IsValidEmailAddressL( aNewText ) ); + + result = ( ok && error == KErrNone ) ? EIMSNoError : EIMSItemInvalid; + } + + return result; + } + +/****************************************************************************** + + Brand new validating code + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateSettingItems() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateSettingItems( + TIMSApproverEvent& aEvent, + const CMuiuSettingBase& aBaseItem, + TDes& aNewText, + TInt& aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateSettingItems, 0, KLogUi ); + + // Incoming settings + switch ( aBaseItem.iItemId.iUid ) + { + // No validating + case EIMASUserFolderSubscription: + break; + + // Special validating + case EIMASUserUnixPath: + case EIMASUserOwnName: + return EvaluateFreeText( aNewText ); + + case EIMASIncomingMailboxName: + return EvaluateAccountName( aBaseItem, aNewText ); + + case EIMASIncomingMailServer: + case EIMASOutgoingMailServer: + return EvaluateServerAddress( aBaseItem, aNewText ); + + case EIMASOutgoingEmailAddress: + case EIMASUserReplyTo: + return EvaluateEmailAddress( aBaseItem, aNewText ); + + // When clearing the username and password, it must be checked + // that the always online and mail message notification is off. + // Otherwise user must be reminded of always online or mail message + // notification requiring username and password in connection. + case EIMASIncomingUserPwd: + case EIMASIncomingUserName: + return EvaluateUsernameOrPassword( aEvent, aNewText ); + + // If the OMA EMN is attempted to turn on, check that + // current state of settings allows it + case EIMASMailNotifications: + return CheckItemOnlineSettingsCheckTurnOn( + aEvent, aNewValue, ETrue ); + + // If the Always Online is attempted to turn on, check that + // current state of settings allows it + case EIMASAORolling: + return CheckItemOnlineSettingsCheckTurnOn( + aEvent, aNewValue, EFalse ); + + case EIMASAODays: + break; + + case EIMASAOHours: + break; + + default: + break; + } + + return ValidateType( aBaseItem, aNewText, aNewValue ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateWizardItems() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateWizardItems( + TIMSApproverEvent& /* aEvent */, + const CMuiuSettingBase& aBaseItem, + TDes& aNewText, + TInt& aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateWizardItems, 0, KLogUi ); + + switch ( aBaseItem.iItemId.iUid ) + { + case EIMAWEmailAddress: + return EvaluateEmailAddress( aBaseItem, aNewText ); + + case EIMAWSendingServer: + case EIMAWReceivingServer: + return EvaluateServerAddress( aBaseItem, aNewText ); + + case EIMAWMailboxName: + return EvaluateAccountName( aBaseItem, aNewText ); + + case EIMAWProtocol: + case EIMAWIap: + default: + break; + } + + return ValidateType( aBaseItem, aNewText, aNewValue ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateItem() +// ---------------------------------------------------------------------------- +// +TMuiuPageEventResult CIMSSettingsItemApprover::EvaluateItem( + TIMSApproverEvent& aEvent, + const CMuiuSettingBase& aBaseItem, + TDes& aNewText, + TInt& aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateItem, 0, KLogUi ); + + TIMSErrors error = EIMSNoError; + + if ( iDialog.Flag( EImumSettingsWizard ) ) + { + error = EvaluateWizardItems( aEvent, aBaseItem, aNewText, aNewValue ); + } + else + { + error = EvaluateSettingItems( aEvent, aBaseItem, aNewText, aNewValue ); + } + + return iNoteUi.ShowDialog( aBaseItem, error, aNewText ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateText() +// ---------------------------------------------------------------------------- +// +TMuiuPageEventResult CIMSSettingsItemApprover::EvaluateText( + TIMSApproverEvent& aEvent, + const CMuiuSettingBase& aBaseItem, + TDes& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateText, 0, KLogUi ); + + aEvent = EIMSApproverNoEvent; + TInt nothing = 0; + return EvaluateItem( aEvent, aBaseItem, aNewText, nothing ); + } + + // ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateValue() +// ---------------------------------------------------------------------------- +// +TMuiuPageEventResult CIMSSettingsItemApprover::EvaluateValue( + TIMSApproverEvent& aEvent, + const CMuiuSettingBase& aBaseItem, + TInt& aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateValue, 0, KLogUi ); + + aEvent = EIMSApproverNoEvent; + TMuiuSettingsText nothing; + return EvaluateItem( aEvent, aBaseItem, nothing, aNewValue ); + } + +/****************************************************************************** + + Common code + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::IsItemFilled() +// ---------------------------------------------------------------------------- +// +TBool CIMSSettingsItemApprover::IsItemFilled( + const CMuiuSettingBase& aBaseItem, + const TInt aLength ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::IsItemFilled, 0, KLogUi ); + + // At first, check if the item can be left empty + TBool ok = + !( aBaseItem.iItemFlags.Flag( EMuiuDynItemMustFill ) || + aBaseItem.iItemFlags.Flag( EMuiuDynItemForceMustFill ) ); + + // The text field is considered filled, when: + // A: Item has NO must fill -flags on + // B: Item has must fill -flags on and length is higher than 0 + return ok || ( !ok && aLength > 0 ); + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::ValidateRadioButton() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::ValidateRadioButtons( + const TInt aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::ValidateRadioButtons, 0, KLogUi ); + IMUM_IN(); + IMUM_OUT(); + + // Make sure item is checked + return ( aNewValue != KErrNotFound ) ? EIMSNoError : EIMSItemEmpty; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::ValidateValue() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::ValidateValue( + const CMuiuSettingBase& aBaseItem, + TInt& aNewValue ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::ValidateValue, 0, KLogUi ); + IMUM_IN(); + IMUM_OUT(); + + // This check makes sure, that the provided value is larger than 0 + return IsItemFilled( aBaseItem, aNewValue ) ? + EIMSNoError : EIMSItemInvalid; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::ValidateTextL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::ValidateText( + const CMuiuSettingBase& aBaseItem, + const TDesC& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::ValidateText, 0, KLogUi ); + IMUM_IN(); + IMUM_OUT(); + + TBool result = IsItemFilled( aBaseItem, aNewText.Length() ); + + if( result ) + { + // Checks if the name of the mailbox contains only + // white space characters. + TInt length = aNewText.Length(); + + // we should not test empty string + // result was that the item is filled, but it may + // still be allowed to be empty + if( !length ) + { + return EIMSNoError; + } + + TUint currentAscii; + + for( TInt i = 0 ; i < length ; i++ ) + { + currentAscii = aNewText[i]; + TChar tempChar( currentAscii ); + + if( !tempChar.IsSpace() ) + { + // If the character isn't a white space character + // then EIMSNoError will be returned. + return EIMSNoError; + } + } + return EIMSItemEmpty; + } + else + { + return EIMSItemEmpty; + } + } + +/****************************************************************************** + + Individual item code + +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateUsernameOrPassword() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateUsernameOrPassword( + TIMSApproverEvent& aEvent, + TDes& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateUsernameOrPassword, 0, KLogUi ); + + TBool ok = aNewText.Length() > 0; + TBool isAoOn = iDialog.Flag( EDialogAlwaysOnlineOn ); + TBool isEmnOn = iDialog.Flag( EDialogOmaEmnOn ); + + MsvEmailMtmUiUtils::StripCharacters( aNewText ); + + // If the field is deleted and always online or oma emn is on + if ( !ok && ( isAoOn || isEmnOn ) ) + { + // Prepare the correct event + aEvent = isAoOn ? + EIMSApproverRemoveAlwaysOnline : EIMSApproverRemoveOmaEmn; + return EIMSAoNoLogin; + } + + return EIMSNoError; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::EvaluateFreeText() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::EvaluateFreeText( TDes& aNewText ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::EvaluateFreeText, 0, KLogUi ); + IMUM_IN(); + + MsvEmailMtmUiUtils::StripCharacters( aNewText ); + + IMUM_OUT(); + return EIMSNoError; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAOCheckTurnOn() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemOnlineSettingsCheckTurnOn( + TIMSApproverEvent& aEvent, + const TInt aNewValue, + TBool aIsEmn ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemOnlineSettingsCheckTurnOn, 0, KLogUi ); + + TIMSErrors result = EIMSNoError; + + // If Always Online or OMA EMN state is changed from off to on, check that + // the current state of settings allows it + TBool ao = ( aNewValue != EMailAoOff && + !iDialog.Flag( EDialogAlwaysOnlineOn ) && !aIsEmn ); + + TBool emn = ( aNewValue != EMailEmnOff && + !iDialog.Flag( EDialogOmaEmnOn ) && aIsEmn ); + + if ( ao || emn ) + { + TRAPD( error, + result = CheckItemOnlineSettingsCheckTurnOnL( aEvent, aIsEmn ) ); + + // If leave occurred, don't accept the setting + if ( error != KErrNone ) + { + // Panic on debug to spot any errors + __ASSERT_DEBUG( EFalse, User::Panic( + KIMSSettingsApproverPanic, error ) ); + + aEvent = EIMSApproverNoEvent; + result = EIMSItemInvalid; + } + } + // Always online or OMA EMN is turned off, or the on state is changed in + // case of always online, simply continue + else + { + result = EIMSNoError; + } + + return result; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemOnlineSettingsCheckTurnOnL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemOnlineSettingsCheckTurnOnL( + TIMSApproverEvent& aEvent, + TBool aIsEmn ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemOnlineSettingsCheckTurnOnL, 0, KLogUi ); + + // Make packet Data check + TIMSErrors result = CheckItemAoConnectionTypeL(); + + // Number of access point mailboxes has to be less than 2 + if ( result == EIMSNoError && !aIsEmn ) + { + result = CheckItemAoCountOkL(); + } + + // Always ask not acceptable, require valid access point + // IAP user name and password check is not allowed + if ( result == EIMSNoError ) + { + result = CheckItemAoAccessPointOkL(); + } + + // Oma EMN not allowed for the AO mailbox + // AO not allowed for the Oma EMN mailbox + if ( result == EIMSNoError ) + { + result = CheckItemAoOmaEmnOffL( aIsEmn ); + } + + // Check for incoming username and password + if ( result == EIMSNoError ) + { + result = CheckItemAoUsernameAndPasswordL(); + } + + // Query the user, if the header limit needs to be ignored + if ( result == EIMSNoError && !aIsEmn ) + { + result = CheckItemAOFixFetchL(); + } + + aEvent = EIMSApproverNoEvent; + + return result; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAoCountOkL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemAoCountOkL() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemAoCountOkL, 0, KLogUi ); + + // Number of always online mailboxes has to be less than 2 + TBool on = MsvEmailMtmUiUtils::CheckActiveAOLimitsL( + iMailboxApi, iDialog.CurrentMailboxId() ); + + // Show error note in case of any errors + if ( !on ) + { + return EIMSAoManyAlwaysOnline; + } + + return EIMSNoError; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAoAccessPointOkL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemAoAccessPointOkL() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemAoAccessPointOkL, 0, KLogUi ); + TIMSErrors result = EIMSNoError; + + return result; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAoOmaEmnOffL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemAoOmaEmnOffL( TBool aIsEmn ) + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemAoOmaEmnOffL, 0, KLogUi ); + + TIMSErrors result = EIMSNoError; + + // AO is tried to turn on + if ( !aIsEmn ) + { + CMuiuSettingsLinkExtended* omaEmnNotification = NULL; + User::LeaveIfError( iDialog.FindItem( + omaEmnNotification, TUid::Uid( EIMASMailNotifications ) ) ); + + // Show error note in case of any errors + if ( omaEmnNotification->Value() != EMailEmnOff ) + { + result = EIMSAoOmaEmnOn; + } + } + // OMA EMN is tried to turn on + else + { + CMuiuSettingsLinkExtended* ao = NULL; + User::LeaveIfError( iDialog.FindItem( + ao, TUid::Uid( EIMASAORolling ) ) ); + + // Show error note in case of any errors + if ( ao->Value() != EMailAoOff ) + { + result = EIMSOmaEmnAoOn; + } + } + + return result; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAoUsernameAndPasswordL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemAoUsernameAndPasswordL() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemAoUsernameAndPasswordL, 0, KLogUi ); + + // Initialize incoming settings array before accessing username and + // password + CMuiuSettingsLinkExtended* username = NULL; + CMuiuSettingsLinkExtended* password = NULL; + User::LeaveIfError( iDialog.FindItem( + username, TUid::Uid( EIMASIncomingUserName ) ) ); + User::LeaveIfError( iDialog.FindItem( + password, TUid::Uid( EIMASIncomingUserPwd ) ) ); + + TBool on = password->Text() && password->Text()->Length() > 0 && + username->Text() && username->Text()->Length() > 0; + + // Show error note in case of any errors + if ( !on ) + { + return EIMSAoNoLogin; + } + + return EIMSNoError; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAoConnectionTypeL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemAoConnectionTypeL() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemAoConnectionTypeL, 0, KLogUi ); + + if ( !iDialog.Flags().LF( EMailFeatureAlwaysOnlineCSD ) ) + { + // Initialize incoming settings array before accessing + // incoming accesspoints + CIMSSettingsAccessPointItem* iapItem = NULL; + User::LeaveIfError( iDialog.FindItem( + iapItem, TUid::Uid( EIMASIncomingIap ) ) ); + + if ( iCommsDbUtils.IsApBearerCircuitSwitchedL( iapItem->iIap.iId ) ) + { + return EIMSAoIapTypeCSD; + } + } + + return EIMSNoError; + } + +// ---------------------------------------------------------------------------- +// CIMSSettingsItemApprover::CheckItemAOFixFetchL() +// ---------------------------------------------------------------------------- +// +TIMSErrors CIMSSettingsItemApprover::CheckItemAOFixFetchL() + { + IMUM_CONTEXT( CIMSSettingsItemApprover::CheckItemAOFixFetchL, 0, KLogUi ); + + // Turning on the always online requires of fetching all the mails, + // without header limits. This means the header limit is ignored, which + // has to be queried. + TIMSErrors result = EIMSNoError; + + // Initalize fetch headers array + CMuiuSettingsLinkExtended* inboxLimit = NULL; + CMuiuSettingsLinkExtended* folderLimit = NULL; + User::LeaveIfError( iDialog.FindItem( + inboxLimit, TUid::Uid( EIMASLimitInbox ) ) ); + User::LeaveIfError( iDialog.FindItem( + folderLimit, TUid::Uid( EIMASLimitFolders ) ) ); + + // Check if the value in either of the settings is something else + // than all + TBool inboxOk = !inboxLimit->Value(); + TBool folderOk = !folderLimit->Value(); + TBool hasFolders = iMailboxApi.MailboxUtilitiesL().HasSubscribedFoldersL( + iDialog.CurrentMailboxId() ); + + // If inbox retrieval limit is not all, or user has subscribed folders + // and limit is not all + if ( !inboxOk || ( hasFolders && !folderOk ) ) + { + // Show the note + result = EIMSAoFetchNotAccepted; + } + + inboxLimit = NULL; + folderLimit = NULL; + + return result; + } + + +// End of File