--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/IMSSettingsItemApprover.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -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 <e32base.h>
+#include <msvstd.hrh> // KUidMsvServiceEntryValue
+#include <MuiuMsvUiServiceUtilities.h> // MsvUiServiceUtilities
+#include <StringLoader.h> // StringLoader
+#include <ImumUtils.rsg>
+#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