diff -r 30e048a7b597 -r bad0cc58d154 securitysettings/cpeapuiplugins/cpeapsimakaui/src/cpeapsimakaui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitysettings/cpeapuiplugins/cpeapsimakaui/src/cpeapsimakaui.cpp Tue Aug 31 15:16:37 2010 +0300 @@ -0,0 +1,417 @@ +/* + * 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: + * Control Panel QT UI for EAP-SIM and EAP-AKA method configuration + * + */ + +/* + * %version: 18 % + */ + +// System includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "cpeapsimakaui.h" + +/*! + * \class CpEapSimAkaUi + * \brief Implementes EAP-SIM and EAP-AKA method configuration ui. + */ + +// External function prototypes + +// Local constants + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +/*! + * Constructor. + * + * @param bearer Bearer type of the accessed configuration. + * @param iapId IAP ID of the accessed configuration. + * @param plugin Plugin. + * @param outerHandle Outer handle. + */ +CpEapSimAkaUi::CpEapSimAkaUi( + const EapQtConfigInterface::EapBearerType bearer, + const int iapId, + const EapQtPluginInfo &plugin, + const EapQtPluginHandle& outerHandle) : + mConfigIf(NULL), + mPluginInfo(plugin), + mOuterHandle(outerHandle), + mForm(NULL), + mModel(NULL), + mItemDataHelper(NULL), + mGroupItem(NULL), + mUsernameAutomatic(NULL), + mUsername(NULL), + mRealmAutomatic(NULL), + mRealm(NULL), + mValidatorRealm(NULL), + mValidatorUsername(NULL) +{ + qDebug("CpEapSimAkaUi::CpEapSimAkaUi"); + + // IAP must be valid in construction (check includes + // EapQtConfigInterface::IapIdUndefined) + if (iapId < 0) { + QT_THROW(std::bad_alloc()); + // scoped pointer gets deleted automaticaly on exception + } + + // Get EAP config interface + mConfigIf.reset(new EapQtConfigInterface(bearer, iapId)); + + createUi(); +} + +/*! + * Destructor. + */ +CpEapSimAkaUi::~CpEapSimAkaUi() +{ + qDebug("CpEapSimAkaUi::~CpEapSimAkaUi"); + + // mValidatorRealm, mValidatorUsername + // mConfigIf: scoped pointer deleted automatically +} + +/*! + * Creates EAP-SIM/AKA UI and initilizes settings read via + * EapQtConfigInterface + */ +void CpEapSimAkaUi::createUi() +{ + qDebug("CpEapSimAkaUi::createUi"); + + // Read EAP Configurations + bool configurationRead = mConfigIf->readConfiguration(mOuterHandle, mPluginInfo.pluginHandle(), + mEapConfig); + if (!configurationRead) { + qDebug("CpEapSimAkaUi::initializeSimAkaUi - read configuration failed."); + } + + // Construct EAP-SIM/AKA settings UI + mForm = new HbDataForm(); + this->setWidget(mForm); + mModel = new HbDataFormModel(mForm); + + mGroupItem = new HbDataFormModelItem(HbDataFormModelItem::GroupItem, + HbParameterLengthLimiter( + hbTrId("txt_occ_subhead_eap_module_settings")).arg( + mPluginInfo.localizationId())); + mModel->appendDataFormItem(mGroupItem); + + // The parameter given as 0 is a HbDataForm pointer, not parent + mItemDataHelper = new CpItemDataHelper(0); + mItemDataHelper->setParent(this); + + // Create UI components + createUsername(); + createRealm(); + + mItemDataHelper->bindToForm(mForm); + mForm->setModel(mModel); + + // Connect signal to add validators when items get activated (visualization created). + bool connected = connect(mForm, SIGNAL( itemShown(const QModelIndex&) ), this, + SLOT( setValidator(const QModelIndex) )); + Q_ASSERT(connected); + + // Expand EAP-SIM/AKA settings group + mForm->setExpanded(mModel->indexFromItem(mGroupItem), true); +} + +/*! + * Creates Username group: + * Generate automatically checkBox and username lineEdit + */ +void CpEapSimAkaUi::createUsername() +{ + qDebug("CpEapSimAkaUi::createUsername()"); + // UsernameAutomatic + mUsernameAutomatic = new CpSettingFormItemData(HbDataFormModelItem::CheckBoxItem, hbTrId( + "txt_occ_setlabel_user_name")); + mUsernameAutomatic->setContentWidgetData("text", hbTrId( + "txt_occ_setlabel_user_name_val_generate_automatica")); + // Initialize the value from EapQtConfig + // Generate username automatically is selected by default + mUsernameAutomatic->setContentWidgetData("checkState", boolToCheckState(mEapConfig.value( + EapQtConfig::UsernameAutomatic).toBool())); + // Connect signal to disable/enable username when usernameAutomatic changed + mForm->addConnection(mUsernameAutomatic, SIGNAL(stateChanged(int)), this, + SLOT(usernameAutomaticChanged(int))); + mGroupItem->appendChild(mUsernameAutomatic); + + //Username + mUsername = new CpSettingFormItemData(HbDataFormModelItem::TextItem, hbTrId( + "txt_occ_setlabel_user_name")); + mUsername->setContentWidgetData("text", mEapConfig.value(EapQtConfig::Username)); + // Dim username if usernameAutomatic selected + usernameAutomaticChanged(mUsernameAutomatic->contentWidgetData("checkState") == Qt::Checked); + mGroupItem->appendChild(mUsername); +} + +/*! + * Creates Realm group: + * Generate automatically checkBox and realm lineEdit + */ +void CpEapSimAkaUi::createRealm() +{ + qDebug("CpEapSimAkaUi::createRealm()"); + // RealmAutomatic + mRealmAutomatic = new CpSettingFormItemData(HbDataFormModelItem::CheckBoxItem, hbTrId( + "txt_occ_setlabel_realm")); + mRealmAutomatic->setContentWidgetData("text", hbTrId( + "txt_occ_setlabel_realm_val_generate_automatically")); + // Initialize the value from EapQtConfig + // Generate realm automatically is selected by default + mRealmAutomatic->setContentWidgetData("checkState", boolToCheckState(mEapConfig.value( + EapQtConfig::RealmAutomatic).toBool())); + // connect signal to disable/enable realm when realmAutomatic changed + mForm->addConnection(mRealmAutomatic, SIGNAL(stateChanged(int)), this, + SLOT(realmAutomaticChanged(int))); + mGroupItem->appendChild(mRealmAutomatic); + + //Realm + mRealm = new CpSettingFormItemData(HbDataFormModelItem::TextItem, hbTrId( + "txt_occ_setlabel_realm")); + mRealm->setContentWidgetData("text", mEapConfig.value(EapQtConfig::Realm)); + // Dim realm if realmAutomatic selected + realmAutomaticChanged(mRealmAutomatic->contentWidgetData("checkState") == Qt::Checked); + mGroupItem->appendChild(mRealm); +} + +/*! + * Adds validators. + * + * @param modelIndex Model index + */ +void CpEapSimAkaUi::setValidator(const QModelIndex modelIndex) +{ + qDebug("CpEapUserPasswordUi::itemActivated"); + + HbDataFormViewItem *viewItem = qobject_cast + (mForm->itemByIndex(modelIndex)); + HbDataFormModelItem *modelItem = mModel->itemFromIndex(modelIndex); + + if (modelItem == mUsername) { + // When username lineEdit is activated (shown) first time, validator is added + mValidatorUsername.reset(mConfigIf->validatorEap(mPluginInfo.pluginHandle().type(), + EapQtConfig::Username)); + HbLineEdit *edit = qobject_cast (viewItem->dataItemContentWidget()); + mValidatorUsername->updateEditor(edit); + } + else if (modelItem == mRealm) { + // When realm lineEdit is activated (shown) first time, validator is added + mValidatorRealm.reset(mConfigIf->validatorEap(mPluginInfo.pluginHandle().type(), + EapQtConfig::Realm)); + HbLineEdit *edit = qobject_cast (viewItem->dataItemContentWidget()); + mValidatorRealm->updateEditor(edit); + } +} + +/*! + * This is called when user is about to exit the view. + * Validates configuration and saves settings. + * If configuration is not valid prompts question dialog. + * If user chooses "OK" leaves without saving. + * + */ +void CpEapSimAkaUi::close() +{ + qDebug("CpEapSimAkaUi::close"); + + // Validate configuration + if (validate()) { + qDebug("CpEapSimAkaUi::close - Validation OK"); + + // Store settings + if (storeSettings()){ + qDebug("CpEapSimAkaUi::close - Settings stored, close view"); + // Close view + CpBaseSettingView::close(); + } + else { + qDebug("CpEapSimAkaUi::close - Store settings failed, prompt warning"); + // Store failed. Show error note to user + QScopedPointer infoBox; + infoBox.reset(new HbMessageBox( + HbMessageBox::MessageTypeWarning)); + infoBox->setAttribute(Qt::WA_DeleteOnClose); + infoBox->setText(hbTrId("txt_occ_info_unable_to_save_setting")); + infoBox->clearActions(); + // Connect 'OK'-button to CpBaseSettingView 'aboutToClose'-signal + HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok")); + infoBox->addAction(okAction); + bool connected = connect( + okAction, + SIGNAL(triggered()), + this, + SIGNAL(aboutToClose())); + Q_ASSERT(connected); + infoBox->open(); + infoBox.take(); + } + } + else { + qDebug("CpEapSimAkaUi::close - validation failed. Prompt question."); + QScopedPointer messageBox; + messageBox.reset(new HbMessageBox( + HbMessageBox::MessageTypeQuestion)); + messageBox->setAttribute(Qt::WA_DeleteOnClose); + messageBox->setText(hbTrId("txt_occ_info_incomplete_details_return_without_sa")); + messageBox->clearActions(); + // Connect 'YES'-button to CpBaseSettingView 'aboutToClose'-signal + HbAction *okAction = new HbAction(hbTrId("txt_common_button_yes")); + messageBox->addAction(okAction); + bool connected = connect( + okAction, + SIGNAL(triggered()), + this, + SIGNAL(aboutToClose())); + Q_ASSERT(connected); + // Clicking 'NO'-button does nothing + HbAction *cancelAction = new HbAction(hbTrId("txt_common_button_no")); + messageBox->addAction(cancelAction); + messageBox->setTimeout(HbPopup::NoTimeout); + messageBox->open(); + messageBox.take(); + } +} + +/*! + * Dims the realm if generate realm automatically has been selected. + * + * @param state Tells is generate automatically checked. + */ +void CpEapSimAkaUi::realmAutomaticChanged(int state) +{ + qDebug("CpEapSimAkaUi::realmAutomaticChanged"); + + mRealm->setContentWidgetData("enabled", !checkStateToBool(state)); +} + +/*! + * Dims the username if generate username automatically has been selected. + * + * @param state Tells is generate automatically checked. + */ +void CpEapSimAkaUi::usernameAutomaticChanged(int state) +{ + qDebug("CpEapSimAkaUi::usernameAutomaticChanged"); + + mUsername->setContentWidgetData("enabled", !checkStateToBool(state)); +} + +/*! + * Converts check box state to boolean. + * + * @param state Check box state + * + * @return true if Check box is checked, false otherwise. + */ +bool CpEapSimAkaUi::checkStateToBool(const int state) +{ + return (Qt::Unchecked == state ? false : true); +} + +/*! + * Converts boolean to check box state. + * + * @param state Tells is check box checked. + * + * @return Qt check state + */ +int CpEapSimAkaUi::boolToCheckState(const bool state) +{ + return (false == state ? Qt::Unchecked : Qt::Checked); +} + +/*! + * Validates settings configuration. + * + * @return true if configuration OK, false otherwise. + */ +bool CpEapSimAkaUi::validate() +{ + bool valid = false; + + if (validateGroup(mUsername, mUsernameAutomatic, mValidatorUsername.data()) + && validateGroup(mRealm, mRealmAutomatic, mValidatorRealm.data())) { + valid = true; + } + + return valid; +} + +/*! + * Validates checkBox and lineEdit group. + * + * @return true if OK, false otherwise. + */ +bool CpEapSimAkaUi::validateGroup(CpSettingFormItemData *edit, CpSettingFormItemData *checkBox, + EapQtValidator *validator) +{ + bool status = false; + // true if generate automatically is checked or given value is valid + if (checkBox->contentWidgetData("checkState") == Qt::Checked + || EapQtValidator::StatusOk == validator->validate( + edit->contentWidgetData("text"))) { + status = true; + } + return status; +} + +/*! + * Stores settings given via SIM-AKA configuration UI + * + * @return false if saving failed, true otherwise + */ +bool CpEapSimAkaUi::storeSettings() +{ + qDebug("CpEapSimAkaUi::storeSettings"); + + EapQtConfig eapConfig; + + eapConfig.setValue(EapQtConfig::OuterType, qVariantFromValue(mOuterHandle)); + eapConfig.setValue(EapQtConfig::UsernameAutomatic, checkStateToBool( + mUsernameAutomatic->contentWidgetData("checkState").toInt())); + eapConfig.setValue(EapQtConfig::Username, mUsername->contentWidgetData("text")); + eapConfig.setValue(EapQtConfig::RealmAutomatic, checkStateToBool( + mRealmAutomatic->contentWidgetData("checkState").toInt())); + eapConfig.setValue(EapQtConfig::Realm, mRealm->contentWidgetData("text")); + + // Save configuration + if (!mConfigIf->saveConfiguration(mPluginInfo.pluginHandle(), eapConfig)) { + qDebug("CpEapSimAkaUi::storeSettings - configuration saving failed."); + return false; + } + return true; +}