wlanutilities/wlanwizard/src/wlanwizardpageprocessingsettings.cpp
author hgs
Mon, 24 May 2010 21:11:39 +0300
changeset 31 e8f4211554fb
child 39 7b3e49e4608a
permissions -rw-r--r--
201021

/*
* 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: 
*   WLAN Wizard Page: Processing settings, connection and running ict.
*/

// System includes
#include <HbMainWindow>
#include <HbDocumentLoader>
#include <HbWidget>
#include <HbLabel>
#include <HbProgressBar>
#include <wlanerrorcodes.h>

// User includes
#include "wlanwizardplugin.h"
#include "wlanqtutils.h"
#include "wlanwizard_p.h"
#include "wlanwizardpageprocessingsettings.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
#include "wlanwizardpageprocessingsettingsTraces.h"
#endif

/*!
   \class WlanWizardPageProcessingSettings
   \brief Implements Processing settings wizard page.
   
   In this page 
   - possible wizard plugin settings are stored
   - connection to the wlan ap is established
   - ICT (Internet connectivity test) is run 
 */

// External function prototypes

// Local constants

// ======== LOCAL FUNCTIONS ========

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


/*!
   Constructor.
   
   @param [in] parent pointer to private implementation of wizard.
 */
WlanWizardPageProcessingSettings::WlanWizardPageProcessingSettings(
    WlanWizardPrivate* parent) :
    WlanWizardPageInternal(parent), 
    mDocLoader(NULL),
    mWidget(NULL), 
    mLabel(NULL), 
    mNextPageId(WlanWizardPageInternal::PageSummary)
{
    WlanQtUtils* utils = mWizard->wlanQtUtils();

    bool ok;
    ok = connect(
        utils, SIGNAL(wlanNetworkOpened(int)), 
        this, SLOT(wlanNetworkOpened(int)));
    Q_ASSERT(ok);
    
    ok = connect(
        utils, SIGNAL(wlanNetworkClosed(int,int)), 
        this, SLOT(wlanNetworkClosed(int,int)));
    Q_ASSERT(ok);
    
#ifdef ICT_RESULT_ENUM
    ok = connect(
        utils, SIGNAL(ictResult(int,WlanLoginIctsResultType)), 
        this, SLOT(ictResult(int,WlanLoginIctsResultType)));
#else
    ok &= connect(
        utils, SIGNAL(ictResult(int,bool)), 
        this, SLOT(ictResult(int,bool)));
#endif
    Q_UNUSED(ok);
    Q_ASSERT(ok);
}

/*!
   Destructor.
 */
WlanWizardPageProcessingSettings::~WlanWizardPageProcessingSettings()
{
    // signals are automatically disconnected
    delete mDocLoader;
    
    // Wizard framework deletes the visualization (owns mWidget).
}

/*!
   See WlanWizardPage::initializePage()
 */
HbWidget* WlanWizardPageProcessingSettings::initializePage()
{
    if (!mWidget) {
        mDocLoader = new HbDocumentLoader(mWizard->mainWindow());
        
        bool ok;
        mDocLoader->load(":/docml/occ_add_wlan_06.docml", &ok);
        Q_ASSERT(ok);
        loadDocmlSection(mWizard->mainWindow()->orientation());
        
        mWidget = qobject_cast<HbWidget*> (mDocLoader->findWidget("occ_add_wlan_06"));
        Q_ASSERT(mWidget != NULL);

        mLabel = qobject_cast<HbLabel*> (mDocLoader->findWidget("dialog"));
        Q_ASSERT(mLabel != NULL);

        ok = connect(
            mWizard->mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
            this, SLOT(loadDocmlSection(Qt::Orientation)));
        Q_ASSERT(ok);
    }
    
    mLabel->setPlainText(hbTrId("txt_occ_dialog_checking_connection_to_1").arg(
        mWizard->configuration(WlanWizardPrivate::ConfSsid).toString()));

    return mWidget;
}

/*!
   See WlanWizardPage::nextId()
   
   @param [out] removeFromStack return value is always true
   
   @return WlanWizardPageInternal::PageSummary
 */
int WlanWizardPageProcessingSettings::nextId(bool &removeFromStack) const
{
    removeFromStack = true;
    return mNextPageId;
}


/*!
   See WlanWizardPage::showPage()
   
   @return false. Next button is dimmed when the page is displayed.
 */
bool WlanWizardPageProcessingSettings::showPage()
{
    return false;
}

/*!
   Loads docml at initialization phase and when HbMainWindow sends orientation()
   signal.
   
   @param [in] orientation to be loaded.
 */
void WlanWizardPageProcessingSettings::loadDocmlSection(Qt::Orientation orientation)
{
    bool ok;
    // Load the orientation specific section   
    if (orientation == Qt::Horizontal) {
        mDocLoader->load(":/docml/occ_add_wlan_06.docml", "landscape_section", &ok);
        Q_ASSERT(ok);
    }
    else {
        Q_ASSERT(orientation == Qt::Vertical);
        mDocLoader->load(":/docml/occ_add_wlan_06.docml", "portrait_section", &ok);
        Q_ASSERT(ok);
    }
}

/*!
   This method is connected to WlanQtUtils::wlanNetworkClosed(int, int) signal.
   to get disconnected status events of currently established connection.
   
   In case of failure, movement to generic error page is triggered.
   
   @param [in] iapId IAP ID
   @param [in] reason Symbian Error code.
 */
void WlanWizardPageProcessingSettings::wlanNetworkClosed(int iapId, int reason)
{
    OstTraceExt2( TRACE_BORDER,
        WLANWIZARDPAGEPROCESSINGSETTINGS_WLANNETWORKCLOSED, 
        "WlanWizardPageProcessingSettings::wlanNetworkClosed;iapId=%d;reason=%d",
        iapId, reason );
        
    if (iapId != mWizard->configuration(WlanWizardHelper::ConfIapId).toInt()) {
        return;
    }

    mWizard->setConfiguration(WlanWizardPrivate::ConfIctStatus, false);
    mWizard->setConfiguration(WlanWizardPrivate::ConfConnected, false);
    
    if (mWizard->isCurrentPage(mWidget)) {
        QString errorText;
        switch (reason) {
        case KErrWlanOpenAuthFailed:
        case KErrWlanSharedKeyAuthRequired:
        case KErrWlanWpaAuthRequired:
        case KErrWlanWpaAuthFailed:
        case KErrWlan802dot1xAuthFailed:
        case KErrWlanIllegalEncryptionKeys:
        case KErrWlanPskModeRequired:
        case KErrWlanEapModeRequired:
            errorText = hbTrId("txt_occ_dialog_authentication_unsuccessful");
            break;
            
        case KErrWlanIllegalWpaPskKey:
            errorText = hbTrId("txt_occ_dialog_incorrect_wpa_preshared_key_pleas");
            break;
            
        case KErrWlanSharedKeyAuthFailed:
            errorText = hbTrId("txt_occ_dialog_incorrect_wep_key_please_check_the");
            break;
        
        case KErrNone:
            // Do nothing, when connection is dropped we don't get any error code
        default:
            // Get plugin specific localized error text if any
            WlanWizardPlugin *plugin = mWizard->wlanWizardPlugin();
            
            if (plugin){
                errorText = plugin->errorString(reason);
            }
            if (errorText.length() == 0) {
                errorText = hbTrId("txt_occ_dialog_connection_failed");
            }
            break;
        }
        mNextPageId = WlanWizardPageInternal::PageGenericError;
        mWizard->setConfiguration(
            WlanWizardHelper::ConfGenericErrorString, errorText);
        mWizard->nextPage();
    }
    
    OstTrace0( 
        TRACE_BORDER, WLANWIZARDPAGEPROCESSINGSETTINGS_WLANNETWORKCLOSED_DONE,
        "WlanWizardPageProcessingSettings::wlanNetworkClosed - Done" );
}

/*!
   Handles ictResult(int, bool) signal from WlanQtUtils and calls
   WlanWizardHelper::nextPage() to trigger movement to next page.
   
   @param [in] iapId IAP ID
   @param [in] reason ICT result, Symbian error code
 */
#ifdef ICT_RESULT_ENUM
void WlanWizardPageProcessingSettings::ictResult(int iapId, WlanLoginIctsResultType reason)
{
    OstTraceExt2( 
        TRACE_BORDER, 
        WLANWIZARDPAGEPROCESSINGSETTINGS_ICTRESULT, 
        "WlanWizardPageProcessingSettings::ictResult;iapId=%d;result=%d", 
        iapId, reason );
    
    if (iapId != mWizard->configuration(WlanWizardHelper::ConfIapId).toInt()) {
        Q_ASSERT(false);
        return;
    }
    mWizard->setConfiguration(WlanWizardPrivate::ConfConnected, true);
    mWizard->setConfiguration(WlanWizardPrivate::ConfIctStatus, reason);
    if(reason == IctsCanceled) {
        QString errorText;
        // TODO: What error string should be loaded?
        mNextPageId = WlanWizardPageInternal::PageGenericError;
        mWizard->setConfiguration(
            WlanWizardHelper::ConfGenericErrorString, errorText);
    }
    mWizard->nextPage();
    
    OstTrace0( TRACE_BORDER, WLANWIZARDPAGEPROCESSINGSETTINGS_ICTRESULT_DONE, 
        "WlanWizardPageProcessingSettings::ictResult - Done" );
}
#else
void WlanWizardPageProcessingSettings::ictResult(int iapId, bool reason)
{
    OstTraceExt2( 
        TRACE_BORDER, 
        WLANWIZARDPAGEPROCESSINGSETTINGS_ICTRESULT_1, 
        "WlanWizardPageProcessingSettings::ictResult;iapId=%d;result=%d", 
        iapId, reason );
    
    if (iapId != mWizard->configuration(WlanWizardHelper::ConfIapId).toInt()) {
        Q_ASSERT(false);
        return;
    }
    mWizard->setConfiguration(WlanWizardPrivate::ConfConnected, true);
    mWizard->setConfiguration(WlanWizardPrivate::ConfIctStatus, reason);
    mWizard->nextPage();
    
    OstTrace0( TRACE_BORDER, WLANWIZARDPAGEPROCESSINGSETTINGS_ICTRESULT_DONE_1, 
        "WlanWizardPageProcessingSettings::ictResult - Done" );
}
#endif

/*!
   Handles wlanNetworkOpened(int) signal from WlanQtUtils.
   
   @param [in] iapId IAP ID
 */
void WlanWizardPageProcessingSettings::wlanNetworkOpened(int iapId)
{
    Q_UNUSED(iapId);
    OstTrace1(
        TRACE_BORDER, 
        WLANWIZARDPAGEPROCESSINGSETTINGS_WLANNETWORKOPENED, 
        "WlanWizardPageProcessingSettings::wlanNetworkOpened;iapId=%d", 
        iapId);
}

/*!
   See WlanWizardPage::requiresStartOperation().
   
   Indicates to framework that startOperation() needs to called.
 */
bool WlanWizardPageProcessingSettings::requiresStartOperation()
{
    return true;
}

/*!
   See WlanWizardPage::startOperation().
   
   Starts the page operation.
 */
void WlanWizardPageProcessingSettings::startOperation()
{
    if (mWizard->handleIap()) {
        mNextPageId = WlanWizardPageInternal::PageSummary;
        
        // in case wlan connection is already established disconnect it
        // note that connectIap() disconnects implicitly connection when 
        // same IAP is already connected.
        WlanQtUtils* utils = mWizard->wlanQtUtils();
        int connectedIapId = utils->activeIap();
        int iapId = mWizard->configuration(WlanWizardHelper::ConfIapId).toInt();
        if (connectedIapId != iapId){
            utils->disconnectIap(connectedIapId);
        }
        mWizard->wlanQtUtils()->connectIap( iapId, true);        
    } else {
        mNextPageId = WlanWizardPageInternal::PageGenericError;
        mWizard->setConfiguration(
            WlanWizardHelper::ConfGenericErrorString, 
            hbTrId("txt_occ_dialog_unable_to_save_settings_please_ret"));
        mWizard->nextPage();
    }
}