diff -r 8b3129ac4c0f -r 093cf0757204 securitysettings/cpwlansecurityuiplugins/cpwpa2ui/src/cpwpa2ui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/securitysettings/cpwlansecurityuiplugins/cpwpa2ui/src/cpwpa2ui.cpp Fri May 14 15:54:13 2010 +0300 @@ -0,0 +1,307 @@ +/* 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 the License "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 WPA2 only configuration + * + */ + +/* + * %version: 17 % + */ + +// User includes +#include "cpwpa2ui.h" +#include "cpwpacmnui.h" +#include "wpa2keyvalidator.h" + +// System includes +#include +#include +#include +#include +#include +#include +#include + +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cpwpa2uiTraces.h" +#endif + + +// Constants +//The order in which WPA2 only mode appears in the list of available +//security mode +const int UI_ORDER_WPA2_ONLY = 50; + +/*! + \class CpWpa2Ui + \brief CpWpa2Ui implements the Ui for WPA2 only + Security Settings Control Panel Plugin, + which will allow viewing/editing of WPA2 only Security Settings. + */ +//Contructs WPA2 object +CpWpa2Ui::CpWpa2Ui() : + mUi(NULL), mCmCM(NULL), mEapQtConfigInterface(NULL), + mWpa2Ui(NULL) +{ + mTranslator = new QTranslator(this); + mTranslator->load(":/loc/wlan_en_GB.qm"); + + qApp->installTranslator(mTranslator); + + /*mTranslator = QSharedPointer ( + new HbTranslator("wlan_en_GB"));*/ + +} + +//Deletes all objects WPA2 owns +CpWpa2Ui::~CpWpa2Ui() +{ + OstTraceFunctionEntry1(CPWPA2UI_CPWPA2UI_ENTRY,this); + //delete mEapQtConfigInterface; + OstTraceFunctionExit1(CPWPA2UI_CPWPA2UI_EXIT,this); +} + +// ======== MEMBER FUNCTIONS ======== + +/*! + Getter for security mode. + + \return Security mode identifier + */ +CMManagerShim::WlanSecMode CpWpa2Ui::securityMode() const +{ + OstTraceFunctionEntry1(CPWPA2UI_MODE_ENTRY,this); + OstTraceFunctionExit1(CPWPA2UI_MODE_EXIT,this); + //return security mode + return CMManagerShim::WlanSecModeWpa2; +} + +/*! + Getter for localization text identifier for the security mode, + f.ex. "txt_occ_setlabel_wlan_security_mode_val_wpa2_only". This localized + text will be shown in the UI. + + \return Localization text ID + */ +QString CpWpa2Ui::securityModeTextId() const +{ + OstTraceFunctionEntry1(CPWPA2UI_LOCALIZATIONID_ENTRY,this); + OstTraceFunctionExit1(CPWPA2UI_LOCALIZATIONID_EXIT,this); + return "txt_occ_setlabel_wlan_security_mode_val_wpa2_only"; +} + +/*! + Sets the database reference (WLAN Service Table ID). + + \param id Database reference + */ +void CpWpa2Ui::setReference(CmConnectionMethodShim *cmCm, uint id) +{ + OstTraceFunctionEntry1(CPWPA2UI_SETREFERENCE_ENTRY,this); + // Assuming that id is the connection method Id/IAP Id. + + mCmId = id; + + /*if (!mEapQtConfigInterface) { + mEapQtConfigInterface = new EapQtConfigInterface( + EapQtConfigInterface::EapBearerTypeWlan, mCmId); + //fix, hangs + }*/ + + //mCmCM is not deleted assuming mCmManager owns it. + mCmCM = cmCm; + OstTraceFunctionExit1(CPWPA2UI_SETREFERENCE_EXIT,this); +} + +/*! + Getter for order number. This order number is used by the client of + this interface to put the security modes in correct order in the list. + + \return An order number + */ +int CpWpa2Ui::orderNumber() const +{ + OstTraceFunctionEntry1(CPWPA2UI_ORDERNUMBER_ENTRY,this); + OstTraceFunctionExit1(CPWPA2UI_ORDERNUMBER_EXIT,this); + return UI_ORDER_WPA2_ONLY; +} + +/*! + Creates an UI instance. Caller owns the object. + + \param dataHelper Item data helper + \return Pointer to an UI object + */ +CpSettingFormItemData* CpWpa2Ui::uiInstance(CpItemDataHelper &dataHelpper) +{ + OstTraceFunctionEntry1(CPWPA2UI_UIINSTANCE_ENTRY,this); + + //reset the Common Ui Ptr + mWpa2Ui.reset(new CpWpaCmnUi(CMManagerShim::WlanSecModeWpa2, dataHelpper)); + + mUi = mWpa2Ui->createUi(mEapQtConfigInterface, mCmCM); + + connect(mWpa2Ui.data(), SIGNAL(keyChanged(QString&)), this, + SLOT(pskKeyChanged(QString&))); + + connect(mWpa2Ui.data(), SIGNAL(pskEapModeToggled(int)), this, + SLOT(wpaTypeChanged(int))); + + connect(mWpa2Ui.data(), SIGNAL(eapPluginChanged(int)), this, + SLOT(currentEapPlugin(int))); + + OstTraceFunctionExit1(CPWPA2UI_UIINSTANCE_EXIT,this); + return mUi; +} + +// ======== LOCAL FUNCTIONS ======== +/*! + Slot to handle change in wpa mode :- PSK /EAP + + \param pskEnable the current mode chosen + */ +/*void CpWpa2Ui::wpaTypeChanged(int pskEnable) +{ + int err; + OstTraceFunctionEntry1(CPWPA2UI_WPATYPECHANGED_ENTRY,this); + + bool PskEnable = pskEnable ? ETrue : EFalse; + + QT_TRYCATCH_ERROR(err,mCmCM->setBoolAttribute(CMManagerShim::WlanEnableWpaPsk, PskEnable)); + + if(err !=KErrNone) { + OstTrace1( TRACE_ERROR, CPWPA2UI_WPATYPECHANGED, "ERROR WPA2 only:wpatypereturned returned %d", err ); + } + tryUpdate(); + OstTraceFunctionExit1(CPWPA2UI_WPATYPECHANGED_EXIT,this); +}*/ + +/*! + Slot to handle change in pre-shared key string + + \param key changed string for PSK + */ +void CpWpa2Ui::pskKeyChanged(QString &key) +{ + int err; + OstTraceFunctionEntry1(CPWPA2UI_PSKKEYCHANGED_ENTRY,this); + + //Check for Validity of Pre-shared Key + Wpa2KeyValidator::KeyStatus keystatus = Wpa2KeyValidator::validateWpa2Key(key); + + if (keystatus == Wpa2KeyValidator::KeyStatusOk) { + QT_TRYCATCH_ERROR(err, mCmCM->setString8Attribute(CMManagerShim::WlanWpaPreSharedKey, key)); + if(err !=KErrNone) { + OstTrace1( TRACE_ERROR, CPWPA2UI_PSKKEYCHANGED, "ERROR WPA2 only: pskKeyChanged returned %d", err ); + } + tryUpdate(); + } + + else { + showMessageBox(HbMessageBox::MessageTypeWarning, hbTrId( + "txt_occ_info_invalid_input")); + } + OstTraceFunctionExit1(CPWPA2UI_PSKKEYCHANGED_EXIT,this); +} + +/*! + Slot to handle change in eap method in use + \param currentplugin plugin number to indicate the + eap method in use + */ +/*void CpWpa2Ui::currentEapPlugin(int currentPlugin ) +{ + OstTraceFunctionEntry1(CPWPA2UI_CURRENTEAPPLUGIN_ENTRY,this); + + // define enum to store the current EAP type + //mCmCM->setIntAttribute( use appropriate enum to get the eap plugin index ); + OstTraceFunctionExit1(CPWPA2UI_CURRENTEAPPLUGIN_EXIT,this); +}*/ + +bool CpWpa2Ui::tryUpdate() +{ + OstTraceFunctionEntry1(CPWPA2UI_TRYUPDATE_ENTRY,this); + + // Try update + try { + mCmCM->update(); + } + catch (const std::exception&) { + // Handle error + handleUpdateError(); + + OstTraceFunctionExit1(CPWPA2UI_TRYUPDATE_EXIT,this); + return false; + } + + OstTraceFunctionExit1(DUP1_CPWPA2UI_TRYUPDATE_EXIT,this); + return true; +} + +/*! + Handles failed CommsDat update. + */ +void CpWpa2Ui::handleUpdateError() +{ + OstTraceFunctionEntry1(CPWPA2UI_HANDLEUPDATEERROR_ENTRY,this); + + // Show error note to user + showMessageBox( + HbMessageBox::MessageTypeWarning, + hbTrId("txt_occ_info_unable_to_save_setting")); + // Reload settings from CommsDat and update UI + try { + mCmCM->refresh(); + } + catch (const std::exception&) { + // Ignore error from refresh. Most likely this will not happen, but + // if it does, there isn't very much we can do. + OstTrace0( + TRACE_ERROR, + CPWPA2UI_HANDLEUPDATEERROR, + "Refresh failed"); + }; + updateWpaSettings(); + + OstTraceFunctionExit1(CPWPA2UI_HANDLEUPDATEERROR_EXIT,this); +} + +/*! + Shows message box with "OK" button using given text. +*/ +void CpWpa2Ui::showMessageBox( + HbMessageBox::MessageBoxType type, + const QString &text) +{ + OstTraceFunctionEntry1(CPWPA2UI_SHOWMESSAGEBOX_ENTRY,this); + + // Create a message box + mMessageBox = QSharedPointer(new HbMessageBox(type)); + mMessageBox->setText(text); + mMessageBox->open(); + + OstTraceFunctionExit1(CPWPA2UI_SHOWMESSAGEBOX_EXIT,this); +} + + +void CpWpa2Ui::updateWpaSettings() + { + OstTraceFunctionEntry1(CPWPA2UI_UPDATEWPASETTINGS_ENTRY,this); + mWpa2Ui->reset(); + OstTraceFunctionExit1(CPWPA2UI_UPDATEWPASETTINGS_EXIT,this); + } + +Q_EXPORT_PLUGIN2(CpWpa2Ui, CpWpa2Ui) +;