securitysettings/cpwlansecurityuiplugins/cpwpa2ui/src/cpwpa2ui.cpp
changeset 22 093cf0757204
child 26 9abfd4f00d37
--- /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 <HbDeviceNotificationDialog>
+#include <cmmanagerdefines_shim.h>
+#include <cmconnectionmethod_shim.h>
+#include <eapqtconfiginterface.h>
+#include <QStringList>
+#include <QLocale>
+#include <QCoreApplication>
+
+#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<HbTranslator> (
+               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<HbMessageBox>(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)
+;