ipsservices/nmipssettings/src/nmipssettingsplugin.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:04:17 +0300
branchRCL_3
changeset 63 d189ee25cf9d
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

#include <qplugin.h>
#include <QCoreApplication>
#include <QTranslator>
#include <QScopedPointer>
#include <QLocale>

#include <HbStringUtil>
#include <HbDataForm>
#include <HbDataFormModel>
#include <HbDataFormModelItem>
#include <HbLineEdit>
#include <HbAction>

#include <cpsettingformitemdata.h>

#include "nmipssettingsplugin.h"
#include "nmipssettingshelper.h"
#include "nmipssettingsmanagerbase.h"
#include "nmipssettingsmanagerfactory.h"
#include "nmipssettingitems.h"
#include "nmcommon.h"
#include "ipssettingkeys.h"

#include "nmipssettingscustomitem.h"
#include "nmipssettingslabeledcombobox.h"

const QString NmIpsSettingsComboItems("comboItems");
const QString NmIpsSettingsLabelTexts("labelTexts");
const QString NmIpsSettingsItems("items");
const int NmIpsSettingsReceptionUserDefinedProfileEnabled(1);

/*!
    \class NmIpsSettingsPlugin
    \brief The class implements NmSettingsPluginInterface which is an interface
           for NMail settings plug-ins.

*/

// ======== MEMBER FUNCTIONS ========

/*!
    Constructor of NmIpsSettingsPlugin.
*/
NmIpsSettingsPlugin::NmIpsSettingsPlugin()
: mSettingsHelper(0),
  mSettingsManager(0),
  mHiddenItem(false),
  mCurrentInboxIndex(-1)
{
    QString lang = QLocale::system().name();
    QString path = "Z:/resource/qt/translations/";
    QString appName = "mailips_";
    QString commonName = "common_";
    
    // Load common strings
	QScopedPointer<QTranslator> commonTranslator(new QTranslator(this));
    commonTranslator->load(commonName + lang, path);
    QCoreApplication::installTranslator(commonTranslator.data());
    (void)commonTranslator.take();  
    
    // Load IPS settings specific strings
	QScopedPointer<QTranslator> translator(new QTranslator(this));
    translator->load(appName + lang, path);
    QCoreApplication::installTranslator(translator.data());
    (void)translator.take();
}

/*!
    Destructor of NmIpsSettingsPlugin.
*/
NmIpsSettingsPlugin::~NmIpsSettingsPlugin()
{
    delete mSettingsManager;
    delete mSettingsHelper;
}

/*!
    Populates the form items into model.
    \param model Reference to the model.
    \param form Reference to the form.
    \param mailboxId Id of the mailbox.
    \return <code>true</code> if plug-in contains certain mailbox otherwise <code>false</code>
*/
bool NmIpsSettingsPlugin::populateModel(HbDataFormModel &model,
    HbDataForm &form, const NmId &mailboxId)
{
    // populateModel is called each time when a new settings view is created and this
    // plugin is destructed only after the mail settings is exited, so
    // SettingsManager and SettingsHelper needs to be deleted.
    delete mSettingsManager;
    delete mSettingsHelper;
    mSettingsHelper = 0;
    mSettingsManager = NmIpsSettingsManagerFactory::createSettingManager(mailboxId);

    bool result(false);

    // This plugin is only used when the mailbox is a IMAP or POP3 account.
    // Settings manager object is valid if the mailboxId is IMAP or POP3 account.
    if (mSettingsManager) {
        // Turns AlwaysOnline OFF
        setAlwaysOnlineState(EServerAPIEmailTurnOff, mailboxId);
        
        // Store model and form pointers.
        mModel = &model;
        mForm = &form;
        
        // Create settings helper.
        mSettingsHelper = new NmIpsSettingsHelper(*mSettingsManager, form, model);

        connect(mSettingsHelper,
                SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)),
                this, SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)));

        connect(mSettingsHelper, SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)),
                this, SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)));

        connect(mSettingsHelper, SIGNAL(goOffline(const NmId &)),
                this, SIGNAL(goOffline(const NmId &)));

        connect(mSettingsHelper, SIGNAL(createUserDefinedMode()),
                this, SLOT(createUserDefinedMode()));
        
        // Get the value if some ui items need to be hidden.
        QVariant data;
        mSettingsManager->readSetting(IpsServices::UserNameHidden, data);
        mHiddenItem = data.toBool();
        // Add items to the model.
        initGroupItems();
        result = true;
    }
    return result;
}

/*!
    This slot can be used in cases when plugin needs to handle stuff before settingsview is closed.
*/
void NmIpsSettingsPlugin::aboutToClose()
{
    QVariant profileIndex;
    const NmId mailboxId = mSettingsManager->mailboxId();
    
	mSettingsManager->readSetting(IpsServices::ReceptionActiveProfile, profileIndex);
	if ((mSettingsHelper->isOffline()) && (profileIndex.toInt() != IpsServices::EmailSyncProfileManualFetch)) {
		emit goOnline(mailboxId);
	}
	
	// Turns AlwaysOnline ON
	setAlwaysOnlineState(EServerAPIEmailTurnOn, mailboxId);
}

/*!
    Appends the group items to the model.
*/
void NmIpsSettingsPlugin::initGroupItems()
{
    HbDataFormModelItem *rootItem = mModel->invisibleRootItem();

    HbDataFormModelItem *preferencesItem =
        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
                                   hbTrId("txt_mailips_subhead_preferences"),
                                   rootItem);
    initPreferenceItems(*preferencesItem);

    HbDataFormModelItem *receivingScheduleItem =
        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
                                   hbTrId("txt_mailips_subhead_receiving_schedule"),
                                   rootItem);
    mSettingsHelper->setReceivingScheduleGroupItem(receivingScheduleItem);
    initReceivingScheduleItems(*receivingScheduleItem);

    HbDataFormModelItem *userInfoItem =
        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
                                   hbTrId("txt_mailips_subhead_user_info"),
                                   rootItem);
    initUserInfoItems(*userInfoItem);

    HbDataFormModelItem *serverInfoItem =
        mModel->appendDataFormItem(HbDataFormModelItem::GroupItem,
                                   hbTrId("txt_mailips_subhead_server_info"),
                                   rootItem);
    mSettingsHelper->setServerInfoGroupItem(serverInfoItem);
    initServerInfoItems(*serverInfoItem);

    // Create the delete mailbox button.
    HbDataFormModelItem::DataItemType buttonItem =
        static_cast<HbDataFormModelItem::DataItemType>(
            HbDataFormModelItem::CustomItemBase + 2);

    HbDataFormModelItem *deleteMailboxButtonItem =
        mModel->appendDataFormItem(buttonItem, QString(), rootItem);
    deleteMailboxButtonItem->setContentWidgetData(QString("text"),
                                                  hbTrId("txt_mailips_button_delete_mailbox"));

    mForm->addConnection(deleteMailboxButtonItem, SIGNAL(clicked()),
                         mSettingsHelper, SLOT(deleteButtonPress()));

}

/*!
    Appends the preferences items to the group item.
    \param item Reference to the parent group item.
*/
void NmIpsSettingsPlugin::initPreferenceItems(HbDataFormModelItem &item) const
{
    // 1. Connection
    QVariant destId;
    mSettingsManager->readSetting(IpsServices::Connection, destId);
    QString destName(mSettingsHelper->destinationNameFromIdentifier(destId.toUInt()));
    HbDataFormModelItem::DataItemType buttonItem =
        static_cast<HbDataFormModelItem::DataItemType>(
            HbDataFormModelItem::CustomItemBase + 2);
    CpSettingFormItemData *connectionButtonItem = new CpSettingFormItemData(buttonItem,
        hbTrId("txt_mailips_setlabel_connection"));
    connectionButtonItem->setContentWidgetData(QString("text"), destName);
    mSettingsHelper->insertContentItem(IpsServices::Connection, connectionButtonItem);
    mForm->addConnection(connectionButtonItem, SIGNAL(clicked()),
                         mSettingsHelper, SLOT(connectionButtonPress()));
    item.appendChild(connectionButtonItem);

    // 2. My Name
    QVariant myName;
    mSettingsManager->readSetting(IpsServices::EmailAlias, myName);
    CpSettingFormItemData *myNameItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_my_name"));
    mSettingsHelper->insertContentItem(IpsServices::EmailAlias, myNameItem);
    myNameItem->setContentWidgetData(QString("text"), myName);
    mForm->addConnection(myNameItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveMyName()));
    mForm->addConnection(myNameItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(myNameTextChange(QString)));
    item.appendChild(myNameItem);

    // 3. Mailbox Name
    QVariant mailboxName;
    mSettingsManager->readSetting(IpsServices::MailboxName, mailboxName);
    CpSettingFormItemData *mailboxNameItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_mailbox_name"));
    mSettingsHelper->insertContentItem(IpsServices::MailboxName, mailboxNameItem);
    mailboxNameItem->setContentWidgetData(QString("text"), mailboxName);
    mForm->addConnection(mailboxNameItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveMailboxName()));
    mForm->addConnection(mailboxNameItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(mailboxNameTextChange(QString)));
    item.appendChild(mailboxNameItem);
}

/*!
    Appends the receiving schedule items to the group item.
    \param item Reference to the parent group item.
*/
void NmIpsSettingsPlugin::initReceivingScheduleItems(HbDataFormModelItem &item)
{
    // Active sync profile

    // Append custom item to the prototype list.
    NmIpsSettingsCustomItem *prototype = new NmIpsSettingsCustomItem();
    QList<HbAbstractViewItem *> protoTypeList = mForm->itemPrototypes();
    protoTypeList.append(prototype);
    mForm->setItemPrototypes(protoTypeList);

    // 1. Active sync profile
    HbDataFormModelItem *infoItem = new HbDataFormModelItem(
        static_cast<HbDataFormModelItem::DataItemType>(NmIpsSettingsCustomItem::LabeledComboBox),
        hbTrId("txt_mailips_setlabel_selected_mode"));

    mSettingsHelper->insertContentItem(IpsServices::ReceptionActiveProfile, infoItem);
    item.appendChild(infoItem);

    QStringList modeList;
    modeList << hbTrId("txt_mailips_setlabel_selected_mode_val_keep_upto")          // 0
             << hbTrId("txt_mailips_setlabel_selected_mode_val_save_energy")        // 1
             << hbTrId("txt_mailips_setlabel_selected_mode_val_fetch_manua");       // 2

    QVariant userDefineMode;
    mSettingsManager->readSetting(IpsServices::ReceptionUserDefinedProfile, userDefineMode);


    // If 'user defined' mode is defined then add it to combo items.
    if (userDefineMode.toInt()) {
        modeList << hbTrId("txt_mailips_setlabel_selected_mode_val_user_define");   // 3
    }
    infoItem->setContentWidgetData(NmIpsSettingsComboItems, modeList);

    QStringList infoList;
    infoList << hbTrId("txt_mailips_list_the_mailbox_is_uptodate_during")           // 0
             << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_every_15")        // 1
             << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_only_by");        // 2

    // If 'user defined' mode is defined then add 'user defined' explanation to label list.
    if (userDefineMode.toInt()) {
        infoList << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_as_defin");   // 3
    }
    infoItem->setContentWidgetData(NmIpsSettingsLabelTexts, infoList);

    QVariant profileIndex;
    mSettingsManager->readSetting(IpsServices::ReceptionActiveProfile, profileIndex);
    infoItem->setContentWidgetData(QString("currentIndex"), profileIndex);

    // 2. Show mail in inbox
    QVariant mailInInbox;
    mSettingsManager->readSetting(IpsServices::ReceptionInboxSyncWindow, mailInInbox);

    CpSettingFormItemData *showMailInInboxItem =
        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
            "txt_mailips_setlabel_show_mail_in_inbox"));

    mSettingsHelper->insertContentItem(IpsServices::ReceptionInboxSyncWindow, showMailInInboxItem);

    // If changes are made to showMailItems, conversion table in
    // showMailInInboxModified method needs to be updated also.
    QStringList showMailItems;
    showMailItems << HbStringUtil::convertDigits("50")
                  << HbStringUtil::convertDigits("100")
                  << HbStringUtil::convertDigits("500")
                  << hbTrId("txt_mailips_setlabel_val_all");
    
    showMailInInboxItem->setContentWidgetData(NmIpsSettingsItems, showMailItems);
    showMailInInboxItem->setEnabled(true);
    item.appendChild(showMailInInboxItem);

    // Active sync profile connection
    mForm->addConnection(infoItem, SIGNAL(currentIndexChanged(int)),
        mSettingsHelper, SLOT(receivingScheduleChange(int)));
    mForm->addConnection(showMailInInboxItem, SIGNAL(finished(HbAction *)),
           this, SLOT(showMailInInboxModified(HbAction *)));
    mForm->addConnection(showMailInInboxItem, SIGNAL(itemSelected(int)),
           this, SLOT(inboxSelectionModified(int)));
    
    // Must be called manually here, because the signal->slot connection set above using
    // HbDataForm::addConnection() is actually established AFTER the properties have first been
    // set to the widget, causing the first currentIndexChanged signal not to reach
    // NmIpsSettingsHelper::receivingScheduleChange().
    mSettingsHelper->receivingScheduleChange(profileIndex.toInt());

}


/*!
    Appends the user info items to the group item.
    \param item Reference to the parent group item.
*/
void NmIpsSettingsPlugin::initUserInfoItems(HbDataFormModelItem &item) const
{
    // 1. Mail address
    QVariant mailAddress;
    mSettingsManager->readSetting(IpsServices::EmailAddress, mailAddress);
    CpSettingFormItemData *mailAddressItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_mail_address"));
    mSettingsHelper->insertContentItem(IpsServices::EmailAddress, mailAddressItem);
    mailAddressItem->setContentWidgetData(QString("text"), mailAddress);
    mForm->addConnection(mailAddressItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveMailAddress()));
    mForm->addConnection(mailAddressItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(mailAddressTextChange(QString)));
    item.appendChild(mailAddressItem);

    // 2. Username
    QVariant username;
    mSettingsManager->readSetting(IpsServices::IncomingLoginName, username);
    CpSettingFormItemData *usernameItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_username"));
    mSettingsHelper->insertContentItem(IpsServices::IncomingLoginName, usernameItem);
    usernameItem->setContentWidgetData(QString("text"), username);
    mForm->addConnection(usernameItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveIncomingUserName()));
    mForm->addConnection(usernameItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(incomingUserNameTextChange(QString)));
    if (mHiddenItem) { // Starred and dimmed.
        usernameItem->setContentWidgetData(QString("echoMode"), HbLineEdit::Password);
        usernameItem->setEnabled(false);
    }
    item.appendChild(usernameItem);
    
    
    // 3. Password
    QVariant password;
    mSettingsManager->readSetting(IpsServices::IncomingPassword, password);
    CpSettingFormItemData *passwordItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_password"));
    mSettingsHelper->insertContentItem(IpsServices::IncomingPassword, passwordItem);
    passwordItem->setContentWidgetData(QString("text"), password);
    passwordItem->setContentWidgetData(QString("echoMode"), HbLineEdit::PasswordEchoOnEdit);
    mForm->addConnection(passwordItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveIncomingPassword()));
    item.appendChild(passwordItem);

    // 4. Reply to address
    QVariant replyToAddress;
    mSettingsManager->readSetting(IpsServices::ReplyAddress, replyToAddress);
    CpSettingFormItemData *replyToItem = new CpSettingFormItemData(
       HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_reply_to_address"));
    mSettingsHelper->insertContentItem(IpsServices::ReplyAddress, replyToItem);
    replyToItem->setContentWidgetData(QString("text"), replyToAddress);
    mForm->addConnection(replyToItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveReplyTo()));
    mForm->addConnection(replyToItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(replyToTextChange(QString)));
    item.appendChild(replyToItem);
}

/*!
    Appends the server info items to the group item.
    \param item Reference to the parent group item.
*/
void NmIpsSettingsPlugin::initServerInfoItems(HbDataFormModelItem &item) const
{
    // 1. Incoming mail server address
    QVariant incomingMailServer;
    mSettingsManager->readSetting(IpsServices::IncomingMailServer, incomingMailServer);
    CpSettingFormItemData *incomingMailServerItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_incoming_mail_server"));
    mSettingsHelper->insertContentItem(IpsServices::IncomingMailServer, incomingMailServerItem);
    incomingMailServerItem->setContentWidgetData(QString("text"), incomingMailServer);
    mForm->addConnection(incomingMailServerItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveIncomingMailServer()));
    mForm->addConnection(incomingMailServerItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(incomingMailServerTextChange(QString)));
    if (mHiddenItem) { // Starred and dimmed.
        incomingMailServerItem->setContentWidgetData(QString("echoMode"), HbLineEdit::Password);
        incomingMailServerItem->setEnabled(false);
    }
    item.appendChild(incomingMailServerItem);
    
    // 2. Incoming Secure connection
    CpSettingFormItemData *incomingSecureConnectionItem =
        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
            "txt_mailips_setlabel_incoming_security"));
    mSettingsHelper->insertContentItem(IpsServices::IncomingSecureSockets, incomingSecureConnectionItem);
    QStringList showSCItems;
    showSCItems << hbTrId("txt_mailips_setlabel_security_val_on_starttls")
                << hbTrId("txt_mailips_setlabel_security_val_on_ssltls")
                << hbTrId("txt_mailips_setlabel_security_val_off");
    incomingSecureConnectionItem->setContentWidgetData(QString("items"), showSCItems);
    int incomingSecureConnectionItemIndex = 
        mSettingsHelper->getCorrectIncomingSecureRadioButtonIndex();
    incomingSecureConnectionItem->setContentWidgetData(QString("selected"), 
                                                       incomingSecureConnectionItemIndex);
    mForm->addConnection(incomingSecureConnectionItem, SIGNAL(itemSelected(int)),             
            mSettingsHelper, SLOT(incomingSecureConnectionItemChange(int)));
    if (mHiddenItem) {
        incomingSecureConnectionItem->setEnabled(false);
    }
    item.appendChild(incomingSecureConnectionItem);
    
    // 3. Incoming mail server port
    CpSettingFormItemData *incomingPortItem =
        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
            "txt_mailips_setlabel_incoming_port"));
    mSettingsHelper->insertContentItem(IpsServices::IncomingPort, incomingPortItem);
    QStringList incomingPortItems;
    incomingPortItems << hbTrId("txt_mailips_setlabel_incoming_port_default")
                      << hbTrId("txt_mailips_setlabel_incoming_port_user_defined");
    incomingPortItem->setContentWidgetData(QString("items"), incomingPortItems);
    int incomingPortItemIndex = mSettingsHelper->getCorrectIncomingPortRadioButtonIndex(); 
    incomingPortItem->setContentWidgetData(QString("selected"), incomingPortItemIndex);
    mForm->addConnection(incomingPortItem, SIGNAL(itemSelected(int)),
        mSettingsHelper, SLOT(incomingPortChange(int)));
    if (mHiddenItem) {
        incomingPortItem->setEnabled(false);
    }
    item.appendChild(incomingPortItem);
    
    // 4. Outgoing mail server address
    QVariant outgoingMailServer;
    mSettingsManager->readSetting(IpsServices::OutgoingMailServer, outgoingMailServer);
    CpSettingFormItemData *outgoingMailServerItem = new CpSettingFormItemData(
        HbDataFormModelItem::TextItem, hbTrId("txt_mailips_setlabel_outgoing_mail_server"));
    mSettingsHelper->insertContentItem(IpsServices::OutgoingMailServer, outgoingMailServerItem);
    outgoingMailServerItem->setContentWidgetData(QString("text"), outgoingMailServer);
    mForm->addConnection(outgoingMailServerItem, SIGNAL(editingFinished()),
                         mSettingsHelper, SLOT(saveOutgoingMailServer()));
    mForm->addConnection(outgoingMailServerItem, SIGNAL(textChanged(QString)),
                         mSettingsHelper, SLOT(outgoingMailServerTextChange(QString)));
    if (mHiddenItem) {// Starred and dimmed.
        outgoingMailServerItem->setContentWidgetData(QString("echoMode"), HbLineEdit::Password);
        outgoingMailServerItem->setEnabled(false);
    }
    item.appendChild(outgoingMailServerItem);
    
    // 5. Outgoing secure connection
    CpSettingFormItemData *outgoingSecureConnectionItem =
        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
            "txt_mailips_setlabel_outgoing_security"));
    mSettingsHelper->insertContentItem(IpsServices::OutgoingSecureSockets, outgoingSecureConnectionItem);
    QStringList outgoingShowSCItems;
    outgoingShowSCItems << hbTrId("txt_mailips_setlabel_security_val_on_starttls")
                        << hbTrId("txt_mailips_setlabel_security_val_on_ssltls")
                        << hbTrId("txt_mailips_setlabel_security_val_off");
    outgoingSecureConnectionItem->setContentWidgetData(QString("items"), outgoingShowSCItems);
    int outgoingSecureConnectionItemIndex = 
        mSettingsHelper->getCorrectOutgoingSecureRadioButtonIndex();
    outgoingSecureConnectionItem->setContentWidgetData(QString("selected"), 
                                                       outgoingSecureConnectionItemIndex);
    mForm->addConnection(outgoingSecureConnectionItem, SIGNAL(itemSelected(int)),             
            mSettingsHelper, SLOT(outgoingSecureConnectionItemChange(int)));
    if (mHiddenItem) {
        outgoingSecureConnectionItem->setEnabled(false);
    }
    item.appendChild(outgoingSecureConnectionItem);

    // 6. Outgoing mail server port
    CpSettingFormItemData *outgoingPortItem =
        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
            "txt_mailips_setlabel_outgoing_port"));
    mSettingsHelper->insertContentItem(IpsServices::OutgoingPort, outgoingPortItem);
    QStringList outgoingPortItems;
    outgoingPortItems << hbTrId("txt_mailips_setlabel_incoming_port_default")
                      << hbTrId("txt_mailips_setlabel_incoming_port_user_defined");
    outgoingPortItem->setContentWidgetData(QString("items"), outgoingPortItems);
    int outgoingPortItemIndex = mSettingsHelper->getCorrectOutgoingPortRadioButtonIndex(); 
    outgoingPortItem->setContentWidgetData(QString("selected"), outgoingPortItemIndex);
    mForm->addConnection(outgoingPortItem, SIGNAL(itemSelected(int)),
        mSettingsHelper, SLOT(outgoingPortChange(int)));
    if (mHiddenItem) {
        outgoingPortItem->setEnabled(false);
    }
    item.appendChild(outgoingPortItem);
    
    // 7. Outgoing authentication.
    CpSettingFormItemData *outgoingAuthenticationItem =
        new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
            "txt_mailips_setlabel_outgoing_mail_authentication"));
    mSettingsHelper->insertContentItem(IpsServices::SMTPAuthentication, outgoingAuthenticationItem);
    QStringList outgoingAuthenticationItems;
    outgoingAuthenticationItems << hbTrId("txt_mailips_setlabel_outgoing_authentication_none")
                                << hbTrId("txt_mailips_setlabel_outgoing_authentication_same")
                                << hbTrId("txt_mailips_setlabel_outgoing_authentication_user");
    outgoingAuthenticationItem->setContentWidgetData(QString("items"), outgoingAuthenticationItems);
    int outgoingAuthenticationIndex = 
        mSettingsHelper->getCorrectOutgoingAuthenticationRadioButtonIndex(); 
    outgoingAuthenticationItem->setContentWidgetData(QString("selected"), outgoingAuthenticationIndex);
    mForm->addConnection(outgoingAuthenticationItem, SIGNAL(itemSelected(int)),
        mSettingsHelper, SLOT(outgoingAuthenticationChange(int)));
    item.appendChild(outgoingAuthenticationItem);
    if (mHiddenItem) {
        outgoingAuthenticationItem->setEnabled(false);
    }
    if (outgoingAuthenticationIndex == IpsServices::EMailAuthUserAuthentication) {
        mSettingsHelper->createServerInfoGroupDynamicItems(mHiddenItem);
    }
    
    // 8. Folder path
    // This item is only shown for IMAP4 account.
    if (mSettingsManager->accountType() == IpsServices::EMailImap) {
        CpSettingFormItemData *folderPathItem =
            new CpSettingFormItemData(HbDataFormModelItem::RadioButtonListItem, hbTrId(
                "txt_mailips_setlabel_folder_path"));
        mSettingsHelper->insertContentItem(IpsServices::FolderPath, folderPathItem);    
        QStringList folderPathItems;
        folderPathItems << hbTrId("txt_mailips_setlabel_folder_path_val_default")
                        << hbTrId("txt_mailips_setlabel_folder_path_user_defined");
        folderPathItem->setContentWidgetData(QString("items"), folderPathItems);
        int folderPathItemIndex = mSettingsHelper->getCorrectFolderPathRadioButtonIndex();
        folderPathItem->setContentWidgetData(QString("selected"), folderPathItemIndex);
        mForm->addConnection(folderPathItem, SIGNAL(itemSelected(int)),
            mSettingsHelper, SLOT(folderPathChange(int)));
        item.appendChild(folderPathItem);
    }
}

/*!
    Sets the state of the AlwaysOnline.
    \param command Command for the state of the AlwaysOnline.
    \param mailboxId Mailbox id.
*/
void NmIpsSettingsPlugin::setAlwaysOnlineState(TAlwaysOnlineServerAPICommands command,
                                               NmId mailboxId) const
{
    RAlwaysOnlineClientSession aosession;
    TInt err(aosession.Connect());
    
    if (err == KErrNone) {
        TPckgBuf<TMsvId> mboxBuf(mailboxId.id32());
        
        TRAP_IGNORE(aosession.RelayCommandL(command, mboxBuf));
    }
    
    aosession.Close();
}

/*!
    Creates user defined mode if not already exist.
*/
void NmIpsSettingsPlugin::createUserDefinedMode()
{
    QVariant userDefineMode;
    mSettingsManager->readSetting(IpsServices::ReceptionUserDefinedProfile, userDefineMode);

    // If user defined mode do not already exist, create it.
    if (!userDefineMode.toInt()) {
        // Add 'user defined' mode to combobox.
        HbDataFormModelItem *syncProfile =
            mSettingsHelper->contentItem(IpsServices::ReceptionActiveProfile);

        QVariant contentWidgetData = syncProfile->contentWidgetData(NmIpsSettingsComboItems);
        QStringList modeList = contentWidgetData.value<QStringList>();
        modeList << hbTrId("txt_mailips_setlabel_selected_mode_val_user_define");

        // Add 'user defined' explanation text to label text.
        contentWidgetData = syncProfile->contentWidgetData(NmIpsSettingsLabelTexts);
        QStringList infoList = contentWidgetData.value<QStringList>();
        infoList << hbTrId("txt_mailips_list_the_mailbox_is_refreshed_as_defin");

        // Disconnect signal temporarily so that by setting content widget data will
        // not cause any unnecessary actions in helper.
        mForm->removeConnection(syncProfile, SIGNAL(currentIndexChanged(int)),
            mSettingsHelper, SLOT(receivingScheduleChange(int)));

        syncProfile->setContentWidgetData(NmIpsSettingsComboItems, modeList);
        syncProfile->setContentWidgetData(NmIpsSettingsLabelTexts, infoList);

        // Reconnect signal, so that helper is aware of data modifications.
        mForm->addConnection(syncProfile, SIGNAL(currentIndexChanged(int)),
            mSettingsHelper, SLOT(receivingScheduleChange(int)));

        // Set reception user defined profile enabled.
        userDefineMode.setValue(NmIpsSettingsReceptionUserDefinedProfileEnabled);
        mSettingsManager->writeSetting(IpsServices::ReceptionUserDefinedProfile, userDefineMode);
    }
}

/*!
Handles mail in inbox modifications.

\param action Action that determines whether user clicked OK or cancel.
*/
void NmIpsSettingsPlugin::showMailInInboxModified(HbAction *action)
{
    if ((action->text() == hbTrId("txt_common_button_ok"))
            && (mCurrentInboxIndex >=0 && mCurrentInboxIndex <=3)) {
        int conversionTable[] = { 50, 100, 500, 0 };
        int selectedValue(conversionTable[mCurrentInboxIndex]);
        
        QVariant previouslySelectedValue;
        mSettingsManager->readSetting(IpsServices::ReceptionInboxSyncWindow, previouslySelectedValue);
        if (previouslySelectedValue.toInt() != selectedValue) {
            mSettingsHelper->handleReceivingScheduleSettingChange(
                IpsServices::ReceptionInboxSyncWindow, selectedValue);
        }
    }
    mCurrentInboxIndex = -1;
}
/*!
Handles mail in inbox modifications.

Index   Value
0       50
1       100
2       500
3       All

\param index The index value of the selection.
*/
void NmIpsSettingsPlugin::inboxSelectionModified(int index)
{
    mCurrentInboxIndex = index;
}

Q_EXPORT_PLUGIN2(nmipssettings, NmIpsSettingsPlugin);