diff -r 712b4ffd76bb -r 43351a4f2da3 securitysettings/cpeapuiplugins/cpeaptlsmethodsui/src/cpeappacstoreui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitysettings/cpeapuiplugins/cpeaptlsmethodsui/src/cpeappacstoreui.cpp Thu Sep 16 13:07:04 2010 +0300 @@ -0,0 +1,599 @@ +/* + * 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 PAC store configuration + * + */ + +/* + * %version: 6 % + */ + +// System includes +#include +#include +#include +#include +#include +#include +#include +#include + +// User includes +#include "cpeaptlsmethodsui.h" +#include "cpeappacstoreui.h" + +/*! + * \class CpEapPacStoreUi + * \brief Implementes PAC Store configuration group. + */ + +// External function prototypes + +// Local constants + +/*! + * First lineEdit of the dialog + */ +static const int FirstRow = 0; +/* + * Second lineEdit of the dialog + */ +static const int SecondRow = 1; + +// ======== LOCAL FUNCTIONS ======== + +// ======== MEMBER FUNCTIONS ======== + +/*! + * Constructor. + * + * @param [in] configIf Pointer to EapQtConfigInterface + */ + +CpEapPacStoreUi::CpEapPacStoreUi(EapQtConfigInterface *configIf) : + mConfigIf(configIf), + mItemDataHelper(NULL), + mPacStoreGroup(NULL), + mPacStorePassword(NULL), + mResetPacStore(NULL), + mPacStorePasswordState(0), + mExistPasswordDialog(NULL), + mNewPasswordDialog(NULL), + mMessageBox(NULL) +{ + qDebug("CpEapPacStoreUi::CpEapPacStoreUi()"); +} + +/*! + * Destructor. + */ +CpEapPacStoreUi::~CpEapPacStoreUi() +{ + qDebug("CpEapPacStoreUi::~CpEapPacStoreUi()"); + +} + +/*! + * Returns PAC store UI group + * + * @param [in] dataHelper CpItemDataHelper to add Connections + * + * @return PAC store group + */ +CpSettingFormItemData* CpEapPacStoreUi::uiInstance( + CpItemDataHelper &dataHelpper) +{ + //Store the address of the Data Helper + mItemDataHelper = &dataHelpper; + + mPacStoreGroup.reset(new CpSettingFormItemData( + HbDataFormModelItem::GroupItem, + hbTrId("txt_occ_subhead_pac_store"))); + mPacStoreGroup->setContentWidgetData("objectName", "CpEapPacStoreUiGroupItem"); + + // Read PAC Store configuration + bool configurationRead = mConfigIf->readPacStoreConfiguration( + mPacStoreConfig); + if (!configurationRead) { + // Use default value - PAC store password prompt + qDebug("CpEapPacStoreUi::uiInstance - read PAC store configuration failed."); + } + + // Create PAC store password selection comboBox + createPacStorePassword(); + + // Create Reset PAC store button + createResetPacStore(); + + return mPacStoreGroup.take(); +} + +/*! + * Creates PAC store password selection comboBox + */ +void CpEapPacStoreUi::createPacStorePassword() +{ + qDebug("CpEapPacStoreUi::createPacStorePassword()"); + // Create PAC store password comboBox + mPacStorePassword = new CpSettingFormItemData( + HbDataFormModelItem::ComboBoxItem, + hbTrId("txt_occ_setlabel_pac_store_password")); + mPacStoreGroup->appendChild(mPacStorePassword); + mPacStorePassword->setContentWidgetData( + "objectName", + "CpEapPacStoreUiPassword"); + + // Add items to comboBox List + QStringList items; + items << hbTrId("txt_occ_setlabel_pac_store_password_val_prompt") + << hbTrId("txt_occ_setlabel_pac_store_password_val_user_defin"); + mPacStorePassword->setContentWidgetData("items", items); + + // Initialize selection from PAC store configuration + if (mPacStoreConfig.value(EapQtPacStoreConfig::PacStoreState).toInt() + == EapQtPacStoreConfig::PacStoreStatePasswordStored) { + mPacStorePassword->setContentWidgetData("currentIndex", PacStorePasswordUserDefined); + mPacStorePasswordState = PacStorePasswordUserDefined; + } else { + mPacStorePassword->setContentWidgetData("currentIndex", PacStorePasswordPrompt); + mPacStorePasswordState = PacStorePasswordPrompt; + } + + // Connect signal for password state changed + mItemDataHelper->addConnection(mPacStorePassword, SIGNAL(currentIndexChanged(int)), this, + SLOT(pacStorePasswordChanged(int))); +} + +/*! + * Creates reset PAC store button + */ +void CpEapPacStoreUi::createResetPacStore() +{ + qDebug("CpEapPacStoreUi::createResetPacStore()"); + + // Create button + mResetPacStore = new CpSettingFormItemData( + HbDataFormModelItem::ToggleValueItem, + hbTrId("")); + mPacStoreGroup->appendChild(mResetPacStore); + mResetPacStore->setContentWidgetData( + "objectName", + "CpEapPacStoreUiResetPacStore"); + + // Define text for the button + mResetPacStore->setContentWidgetData("text", + hbTrId("txt_occ_button_reset_pac_store")); + mResetPacStore->setContentWidgetData("additionalText", + hbTrId("txt_occ_button_reset_pac_store")); + + // Connect signal for button pressed + mItemDataHelper->addConnection( + mResetPacStore, + SIGNAL(valueChanged(QPersistentModelIndex, QVariant)), + this, + SLOT(resetPacStoreButtonPressed(QPersistentModelIndex, QVariant))); +} + +/*! + * Set PAC store password state. + * This is called when state changed has failed and state shall be restored. + * + * @param [in] state Pac store password state: Prompt/Userd defined. + */ +void CpEapPacStoreUi::setPacStorePasswordState(const PacStorePasswordIndexes state) +{ + // Remove signal connection while state is restored + mItemDataHelper->removeConnection(mPacStorePassword, SIGNAL(currentIndexChanged(int)), this, + SLOT(pacStorePasswordChanged(int))); + mPacStorePassword->setContentWidgetData("currentIndex", state); + // Restore connection + mItemDataHelper->addConnection(mPacStorePassword, SIGNAL(currentIndexChanged(int)), this, + SLOT(pacStorePasswordChanged(int))); + mPacStorePasswordState = state; +} + +/*! + * Show PAC store password query when PAC store already exists + */ +void CpEapPacStoreUi::showExistPasswordQuery() +{ + qDebug("CpEapPacStoreUi::showExistPasswordQuery()"); + + // Create dialog + QScopedPointer existPasswordDialog(new HbInputDialog()); + existPasswordDialog->setObjectName("CpEapPacStoreUiExistPasswordDialog"); + existPasswordDialog->setAttribute(Qt::WA_DeleteOnClose); + existPasswordDialog->setPromptText(hbTrId("txt_occ_dialog_pac_store_password")); + existPasswordDialog->setInputMode(HbInputDialog::TextInput); + + // Add validator + mValidatorPacStore.reset( + mConfigIf->validatorPacStore( + EapQtPacStoreConfig::PacStorePasswordConfirmation)); + Q_ASSERT(mValidatorPacStore.data()); + mValidatorPacStore->updateEditor(existPasswordDialog->lineEdit()); + + // Set Password echo mode + existPasswordDialog->setEchoMode(HbLineEdit::Password); + + // Configurate buttons + existPasswordDialog->clearActions(); + HbAction *okAction = new HbAction( + hbTrId("txt_common_button_ok"), + existPasswordDialog.data()); + existPasswordDialog->addAction(okAction); + okAction->setObjectName("CpEapPacStoreUiExistPasswordDialogOkAction"); + bool connected = connect(okAction, + SIGNAL(triggered()), + this, + SLOT(completeExistPasswordQuery())); + Q_ASSERT(connected); + HbAction *cancelAction = new HbAction( + hbTrId("txt_common_button_cancel"), + existPasswordDialog.data()); + existPasswordDialog->addAction(cancelAction); + cancelAction->setObjectName("CpEapPacStoreUiExistPasswordDialogCancelAction"); + connected = connect(cancelAction, + SIGNAL(triggered()), + this, + SLOT(cancelPasswordQuery())); + Q_ASSERT(connected); + + // Take the ownership of the dialog from QScopedPointer + mExistPasswordDialog = existPasswordDialog.take(); + + // Show dialog + mExistPasswordDialog->show(); +} + +/*! + * Show create PAC store password query when no PAC store exists + */ +void CpEapPacStoreUi::showNewPasswordQuery() +{ + qDebug("CpEapPacStoreUi::showNewPasswordQuery()"); + + // Create dialog + QScopedPointer newPasswordDialog(new HbInputDialog()); + newPasswordDialog->setObjectName("CpEapPacStoreUiNewPasswordDialog"); + newPasswordDialog->setAttribute(Qt::WA_DeleteOnClose); + newPasswordDialog->setAdditionalRowVisible(true); + newPasswordDialog->setPromptText( + hbTrId("txt_occ_dialog_create_password_for_encrypted_pac_s"), + FirstRow); + newPasswordDialog->setPromptText( + hbTrId("txt_occ_dialog_verify_password"), + SecondRow); + newPasswordDialog->setInputMode(HbInputDialog::TextInput); + + // Add validators + mValidatorPacStore.reset( + mConfigIf->validatorPacStore( + EapQtPacStoreConfig::PacStorePassword)); + Q_ASSERT(mValidatorPacStore.data()); + mValidatorPacStore->updateEditor(newPasswordDialog->lineEdit(FirstRow)); + mValidatorPacStore->updateEditor(newPasswordDialog->lineEdit(SecondRow)); + + // Set Password echo mode + newPasswordDialog->setEchoMode(HbLineEdit::Password, FirstRow); + newPasswordDialog->setEchoMode(HbLineEdit::Password, SecondRow); + + // Configure buttons + newPasswordDialog->clearActions(); + HbAction *okAction = new HbAction( + hbTrId("txt_common_button_ok"), + newPasswordDialog.data()); + newPasswordDialog->addAction(okAction); + okAction->setObjectName("CpEapPacStoreUiNewPasswordDialogOkAction"); + bool connected = connect(okAction, + SIGNAL(triggered()), + this, + SLOT(completeNewPasswordQuery())); + Q_ASSERT(connected); + HbAction *cancelAction = new HbAction( + hbTrId("txt_common_button_cancel"), + newPasswordDialog.data()); + newPasswordDialog->addAction(cancelAction); + cancelAction->setObjectName("CpEapPacStoreUiNewPasswordDialogCancelAction"); + connected = connect(cancelAction, + SIGNAL(triggered()), + this, + SLOT(cancelPasswordQuery())); + + // Take the ownership of the dialog from QScopedPointer + mNewPasswordDialog = newPasswordDialog.take(); + + // Show dialog + mNewPasswordDialog->show(); +} + +/*! + * Shows message box with "OK" button using given text. + * + * @param [in] type Message box type + * @param [in] text Text to be shown + */ +void CpEapPacStoreUi::showMessageBox( + HbMessageBox::MessageBoxType type, + const QString &text) +{ + // Create a message box + mMessageBox = QSharedPointer(new HbMessageBox(type)); + mMessageBox->setObjectName("CpEapPacStoreUiMessageBox"); + mMessageBox->setText(text); + mMessageBox->setModal(true); + mMessageBox->setTimeout(HbPopup::NoTimeout); + mMessageBox->open(); +} + +/*! + * This slot is called when PAC Store password state has been changed + * + * @param [in] value New state of password (prompt/user defined) + */ +void CpEapPacStoreUi::pacStorePasswordChanged(int value) +{ + qDebug("CpEapPacStoreUi::pacStorePasswordChanged()"); + + if (mPacStorePasswordState != value) { + // Value is really changed + if (value == PacStorePasswordPrompt) { + // Prompt + qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Prompt"); + + //Show message box to confirm the PAC store password clearing + HbMessageBox *questionBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + questionBox->setObjectName("CpEapPacStoreUiClearPasswordQuestion"); + questionBox->setText(hbTrId("txt_occ_info_pac_store_password_will_no_longer_be")); + questionBox->setModal(true); + questionBox->setTimeout(HbPopup::NoTimeout); + questionBox->setAttribute(Qt::WA_DeleteOnClose); + questionBox->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No); + questionBox->open(this,SLOT(clearPacStorePasswordConfirmed(int))); + } else { + //User defined + Q_ASSERT(value == PacStorePasswordUserDefined); + qDebug("CpEapPacStoreUi::pacStorePasswordChanged - User defined"); + // Read from PAC store config if PAC store exists + EapQtPacStoreConfig pacStoreConfig; + bool configurationRead = mConfigIf->readPacStoreConfiguration( + pacStoreConfig); + if (!configurationRead) { + qDebug("CpEapPacStoreUi::pacStorePasswordChanged - read PAC store configuration failed."); + } + + if (pacStoreConfig.value(EapQtPacStoreConfig::PacStoreState).toInt() + == EapQtPacStoreConfig::PacStoreStatePasswordRequired) { + // PAC store exists, show 'PAC store password' query + qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Exist password query"); + showExistPasswordQuery(); + } else if (pacStoreConfig.value(EapQtPacStoreConfig::PacStoreState).toInt() + == EapQtPacStoreConfig::PacStoreStateStoreNotExists) { + // PAC store doesn't exist, show create password query + qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Create new password"); + showNewPasswordQuery(); + } else { + // If password already stored no prompt needed + qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Password stored"); + } + } + } +} + +/*! + * Slot for handling "Reset PAC store" button presses. + * + * @param [in] index Obsolete parameter, not needed + * @param [in] value Obsolete parameter, not needed + */ +void CpEapPacStoreUi::resetPacStoreButtonPressed( + QPersistentModelIndex index, + QVariant value) +{ + qDebug("CpEapPacStoreUi::resetPacStoreButtonPressed"); + + Q_UNUSED(index); + Q_UNUSED(value); + + //Show message box to confirm the PAC store resetting + HbMessageBox *questionBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion); + questionBox->setObjectName("CpEapPacStoreUiRestPacStoreQuestion"); + questionBox->setText(hbTrId("txt_occ_info_remove_pac_store_all_credentials_wil")); + questionBox->setModal(true); + questionBox->setTimeout(HbPopup::NoTimeout); + questionBox->setAttribute(Qt::WA_DeleteOnClose); + questionBox->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No); + questionBox->open(this,SLOT(resetPacStoreConfirmed(int))); +} + +/*! + * Slot for clear PAC store Password after confirmed. + * + * @param [in] action User action + */ +void CpEapPacStoreUi::clearPacStorePasswordConfirmed(int action) +{ + qDebug("CpEapPacStoreUi::clearPacStorePasswordConfirmed()"); + if (action == HbMessageBox::Yes) { + // User Clicked Yes + // Clear PAC store password + EapQtPacStoreConfig pacStoreConfig; + pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreSavePassword, false); + bool status = mConfigIf->savePacStoreConfiguration( + pacStoreConfig); + qDebug("CpEapPacStoreUi::clearPacStorePasswordConfirmed - status: %d", status); + mPacStorePasswordState = PacStorePasswordPrompt; + // Show error note to user + if (!status) { + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + } + } else { + // User Clicked No + Q_ASSERT(action == HbMessageBox::No); + // Set PAC store password back to 'User defined' + setPacStorePasswordState(PacStorePasswordUserDefined); + } +} + +/*! + * Slot for reset PAC store after confirmed. + * + * @param [in] action User action + */ +void CpEapPacStoreUi::resetPacStoreConfirmed(int action) +{ + qDebug("CpEapPacStoreUi::resetPacStoreConfirmed()"); + if (action == HbMessageBox::Yes) { + // User Clicked Yes + // Reset PAC Store + EapQtPacStoreConfig pacStoreConfig; + pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreReset, true); + bool status = mConfigIf->savePacStoreConfiguration( + pacStoreConfig); + qDebug("CpEapPacStoreUi::resetPacStoreConfirmed - reset status: %d", status); + if (!status) { + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + } + + // Set PAC store password selection to 'Prompt' + setPacStorePasswordState(PacStorePasswordPrompt); + } else { + // User Clicked No + Q_ASSERT(action == HbMessageBox::No); + // Do nothing (don't reset PAC store) + qDebug("CpEapPacStoreUi::resetPacStoreConfirmed - Do not reset."); + } +} + +/*! + * Slot for confirm given PAC store password when PAC store exists + */ +void CpEapPacStoreUi::completeExistPasswordQuery() +{ + qDebug("CpEapPacStoreUi::completeExistPasswordQuery()"); + QString password = mExistPasswordDialog->value().toString(); + if (mValidatorPacStore->validate(password) == EapQtValidator::StatusOk) { + qDebug("CpEapPacStoreUi::completeExistPasswordQuery() - save password"); + // Password is OK, save it + EapQtPacStoreConfig pacStoreConfig; + pacStoreConfig.setValue(EapQtPacStoreConfig::PacStorePassword, password); + pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreSavePassword, true); + bool status = mConfigIf->savePacStoreConfiguration( + pacStoreConfig); + qDebug("CpEapPacStoreUi::completeExistPasswordQuery - save status: %d", status); + if (status) { + mPacStorePasswordState = PacStorePasswordUserDefined; + } else { + setPacStorePasswordState(PacStorePasswordPrompt); + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + } + + } else { + // Existing password cannot be changed + // Set PAC store password selection back to 'Prompt' + setPacStorePasswordState(PacStorePasswordPrompt); + // Show info popup + HbMessageBox *infoBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); + infoBox->setObjectName("CpEapPacStoreUiPasswordCannotChangeInfo"); + infoBox->setText(hbTrId("txt_occ_info_existing_password_cannot_be_changed")); + infoBox->setModal(true); + infoBox->setTimeout(HbPopup::NoTimeout); + infoBox->setAttribute(Qt::WA_DeleteOnClose); + infoBox->setStandardButtons(HbMessageBox::Ok); + infoBox->open(); + } +} + +/*! + * Slot for save given PAC store password when no PAC store exists + */ +void CpEapPacStoreUi::completeNewPasswordQuery() +{ + qDebug("CpEapPacStoreUi::completeNewPasswordQuery()"); + QString password = mNewPasswordDialog->value(0).toString(); + QString passwordConfirm = mNewPasswordDialog->value(1).toString(); + + if (password == passwordConfirm && + mValidatorPacStore->validate(password) == EapQtValidator::StatusOk) { + // Password is OK, save it + qDebug("CpEapPacStoreUi::completeNewPasswordQuery() - password OK. Save it."); + EapQtPacStoreConfig pacStoreConfig; + pacStoreConfig.setValue(EapQtPacStoreConfig::PacStorePassword, password); + pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreSavePassword, true); + bool status = mConfigIf->savePacStoreConfiguration( + pacStoreConfig); + qDebug("CpEapPacStoreUi::completeNewPasswordQuery - save status: %d", status); + if (status) { + mPacStorePasswordState = PacStorePasswordUserDefined; + } else { + setPacStorePasswordState(PacStorePasswordPrompt); + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + } + } else { + // Password is not OK, show info popup + qDebug("CpEapPacStoreUi::completeNewPasswordQuery() - password Not OK. Show popup."); + HbMessageBox *infoBox = new HbMessageBox(HbMessageBox::MessageTypeInformation); + infoBox->setObjectName("CpEapPacStoreUiInvalidPasswordInfo"); + if (password != passwordConfirm) { + infoBox->setText(hbTrId("txt_occ_info_passwords_do_not_match_try_again")); + } else { + infoBox->setText(hbTrId("txt_occ_info_invalid_input")); + } + infoBox->setModal(true); + infoBox->setTimeout(HbPopup::NoTimeout); + infoBox->setAttribute(Qt::WA_DeleteOnClose); + infoBox->setStandardButtons(HbMessageBox::Ok); + infoBox->open(this,SLOT(invalidPasswordInfoClosed(int))); + } +} + +/*! + * This function is called when user selects CANCEL from + * PAC store password or New PAC store password query popup. + * PAC store password selection is changed back to 'Prompt'. + */ +void CpEapPacStoreUi::cancelPasswordQuery() +{ + qDebug("CpEapPacStoreUi::cancelPasswordQuery()"); + // Set PAC store password selection back to 'Prompt' + setPacStorePasswordState(PacStorePasswordPrompt); +} + +/*! + * This function is called when user selects OK from + * 'Passwords do not match' or 'Invalid input' information popup. + * New PAC store password query dialog is shown again + * + * @param [in] action Obsolete parameter, not needed + */ +void CpEapPacStoreUi::invalidPasswordInfoClosed(int action) +{ + qDebug("CpEapPacStoreUi::invalidPasswordInfoClosed() - Show query again."); + Q_UNUSED(action); + + showNewPasswordQuery(); +}